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