1.0.19.16: derive the type of (AREF (THE STRING X) Y) as CHARACTER
[sbcl.git] / src / compiler / hppa / 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 csp-tn res)))
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 cfp-tn res)))
19
20 (define-vop (read-control-stack)
21   (:translate stack-ref)
22   (:policy :fast-safe)
23   (:args (object :scs (sap-reg))
24          (offset :scs (any-reg)))
25   (:arg-types system-area-pointer positive-fixnum)
26   (:results (result :scs (descriptor-reg)))
27   (:result-types *)
28   (:generator 5
29     (inst ldwx offset object result)))
30
31 (define-vop (read-control-stack-c)
32   (:translate stack-ref)
33   (:policy :fast-safe)
34   (:args (object :scs (sap-reg)))
35   (:info offset)
36   (:arg-types system-area-pointer (:constant (signed-byte 12)))
37   (:results (result :scs (descriptor-reg)))
38   (:result-types *)
39   (:generator 4
40     (inst ldw (* offset n-word-bytes) object result)))
41
42 (define-vop (write-control-stack)
43   (:translate %set-stack-ref)
44   (:policy :fast-safe)
45   (:args (object :scs (sap-reg) :target sap)
46          (offset :scs (any-reg))
47          (value :scs (descriptor-reg) :target result))
48   (:arg-types system-area-pointer positive-fixnum *)
49   (:results (result :scs (descriptor-reg)))
50   (:result-types *)
51   (:temporary (:scs (sap-reg) :from (:argument 1)) sap)
52   (:generator 2
53     (inst add object offset sap)
54     (inst stw value 0 sap)
55     (move value result)))
56
57 (define-vop (write-control-stack-c)
58   (:translate %set-stack-ref)
59   (:policy :fast-safe)
60   (:args (sap :scs (sap-reg))
61          (value :scs (descriptor-reg) :target result))
62   (:info offset)
63   (:arg-types system-area-pointer (:constant (signed-byte 12)) *)
64   (:results (result :scs (descriptor-reg)))
65   (:result-types *)
66   (:generator 1
67     (inst stw value (* offset n-word-bytes) sap)
68     (move value result)))
69
70 (define-vop (code-from-mumble)
71   (:policy :fast-safe)
72   (:args (thing :scs (descriptor-reg) :to :save))
73   (:results (code :scs (descriptor-reg)))
74   (:temporary (:scs (non-descriptor-reg)) temp)
75   (:variant-vars lowtag)
76   (:generator 5
77     (loadw temp thing 0 lowtag)
78     (inst srl temp n-widetag-bits temp)
79     (inst comb := zero-tn temp done)
80     (move null-tn code)
81     (inst sll temp (1- (integer-length n-word-bytes)) temp)
82     (unless (= lowtag other-pointer-lowtag)
83       (inst addi (- lowtag other-pointer-lowtag) temp temp))
84     (inst sub thing temp code)
85     DONE))
86
87 (define-vop (code-from-lra code-from-mumble)
88   (:translate lra-code-header)
89   (:variant other-pointer-lowtag))
90
91 (define-vop (code-from-fun code-from-mumble)
92   (:translate fun-code-header)
93   (:variant fun-pointer-lowtag))
94
95 (define-vop (%make-lisp-obj)
96   (:policy :fast-safe)
97   (:translate %make-lisp-obj)
98   (:args (value :scs (unsigned-reg) :target result))
99   (:arg-types unsigned-num)
100   (:results (result :scs (descriptor-reg)))
101   (:generator 1
102     (move value result)))
103
104 (define-vop (get-lisp-obj-address)
105   (:policy :fast-safe)
106   (:translate get-lisp-obj-address)
107   (:args (thing :scs (descriptor-reg) :target result))
108   (:results (result :scs (unsigned-reg)))
109   (:result-types unsigned-num)
110   (:generator 1
111     (move thing result)))
112
113 (define-vop (fun-word-offset)
114   (:policy :fast-safe)
115   (:translate fun-word-offset)
116   (:args (fun :scs (descriptor-reg)))
117   (:results (res :scs (unsigned-reg)))
118   (:result-types positive-fixnum)
119   (:generator 5
120     (loadw res fun 0 fun-pointer-lowtag)
121     (inst srl res n-widetag-bits res)))