0.9.2.45:
[sbcl/lichteblau.git] / src / compiler / mips / debug.lisp
blob8d0861d263ad3e5b01401220bb32cfaf19283722
1 (in-package "SB!VM")
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)))
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)))
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)))
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)))
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)))
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)))
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 t)))))
97 (define-vop (code-from-lra code-from-mumble)
98 (:translate lra-code-header)
99 (:variant other-pointer-lowtag))
101 (define-vop (code-from-fun code-from-mumble)
102 (:translate fun-code-header)
103 (:variant fun-pointer-lowtag))
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)))
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)))
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)))