d25d226b15d59d2106320ae80d74754593c3fd20
[sbcl.git] / src / compiler / hppa / debug.lisp
1 (in-package "SB!VM")
2
3 (define-vop (debug-cur-sp)
4   (:translate sb!di::current-sp)
5   (:policy :fast-safe)
6   (:results (res :scs (sap-reg)))
7   (:result-types system-area-pointer)
8   (:generator 1
9     (move csp-tn res)))
10
11 (define-vop (debug-cur-fp)
12   (:translate sb!di::current-fp)
13   (:policy :fast-safe)
14   (:results (res :scs (sap-reg)))
15   (:result-types system-area-pointer)
16   (:generator 1
17     (move cfp-tn res)))
18
19 (define-vop (read-control-stack)
20   (:translate sb!kernel:stack-ref)
21   (:policy :fast-safe)
22   (:args (object :scs (sap-reg))
23          (offset :scs (any-reg)))
24   (:arg-types system-area-pointer positive-fixnum)
25   (:results (result :scs (descriptor-reg)))
26   (:result-types *)
27   (:generator 5
28     (inst ldwx offset object result)))
29 (define-vop (read-control-stack-c)
30   (:translate sb!kernel:stack-ref)
31   (:policy :fast-safe)
32   (:args (object :scs (sap-reg)))
33   (:info offset)
34   ; make room for multiply by limiting to 12 bits
35   (:arg-types system-area-pointer (:constant (signed-byte 12)))
36   (:results (result :scs (descriptor-reg)))
37   (:result-types *)
38   (:generator 4
39     (inst ldw (* offset n-word-bytes) object result)))
40
41 (define-vop (write-control-stack)
42   (:translate sb!kernel:%set-stack-ref)
43   (:policy :fast-safe)
44   (:args (object :scs (sap-reg) :target sap)
45          (offset :scs (any-reg))
46          (value :scs (descriptor-reg) :target result))
47   (:arg-types system-area-pointer positive-fixnum *)
48   (:results (result :scs (descriptor-reg)))
49   (:result-types *)
50   (:temporary (:scs (sap-reg) :from (:argument 1)) sap)
51   (:generator 2
52     (inst add object offset sap)
53     (inst stw value 0 sap)
54     (move value result)))
55 (define-vop (write-control-stack-c)
56   (:translate %set-stack-ref)
57   (:policy :fast-safe)
58   (:args (sap :scs (sap-reg))
59          (value :scs (descriptor-reg) :target result))
60   (:info offset)
61   (:arg-types system-area-pointer (:constant (signed-byte 12)) *)
62   (:results (result :scs (descriptor-reg)))
63   (:result-types *)
64   (:generator 1
65     (inst stw value (* offset n-word-bytes) sap)
66     (move value result)))
67
68 (define-vop (code-from-mumble)
69   (:policy :fast-safe)
70   (:args (thing :scs (descriptor-reg)))
71   (:results (code :scs (descriptor-reg)))
72   (:temporary (:scs (non-descriptor-reg)) temp)
73   (:variant-vars lowtag)
74   (:generator 5
75     (let ((bogus (gen-label))
76           (done (gen-label)))
77       (loadw temp thing 0 lowtag)
78       (inst srl temp n-widetag-bits temp)
79       (inst comb := zero-tn temp bogus)
80       (inst sll temp (1- (integer-length n-word-bytes)) temp)
81       (unless (= lowtag other-pointer-lowtag)
82         (inst addi (- lowtag other-pointer-lowtag) temp temp))
83       (inst sub thing temp code)
84       (emit-label done)
85       (assemble (*elsewhere*)
86         (emit-label bogus)
87         (inst b done)
88         (move null-tn code t)))))
89
90 (define-vop (code-from-lra code-from-mumble)
91   (:translate sb!di::lra-code-header)
92   (:variant other-pointer-lowtag))
93
94 (define-vop (code-from-fun code-from-mumble)
95   (:translate sb!di::fun-code-header)
96   (:variant fun-pointer-lowtag))
97
98 (define-vop (%make-lisp-obj)
99   (:policy :fast-safe)
100   (:translate %make-lisp-obj)
101   (:args (value :scs (unsigned-reg) :target result))
102   (:arg-types unsigned-num)
103   (:results (result :scs (descriptor-reg)))
104   (:generator 1
105     (move value result)))
106
107 (define-vop (get-lisp-obj-address)
108   (:policy :fast-safe)
109   (:translate sb!di::get-lisp-obj-address)
110   (:args (thing :scs (descriptor-reg) :target result))
111   (:results (result :scs (unsigned-reg)))
112   (:result-types unsigned-num)
113   (:generator 1
114     (move thing result)))
115
116 (define-vop (fun-word-offset)
117   (:policy :fast-safe)
118   (:translate sb!di::fun-word-offset)
119   (:args (fun :scs (descriptor-reg)))
120   (:results (res :scs (unsigned-reg)))
121   (:result-types positive-fixnum)
122   (:generator 5
123     (loadw res fun 0 fun-pointer-lowtag)
124     (inst srl res n-widetag-bits res)))