|
36 | 36 | ;; If INDEX + OFFSET <_u BOUND, though, INDEX must be less than
|
37 | 37 | ;; BOUND. We *do* need to check for 0 <= INDEX, but that has
|
38 | 38 | ;; already been assured by higher-level machinery.
|
39 |
| - (inst lea temp (make-ea :qword |
40 |
| - :index index :disp (fixnumize offset))) |
| 39 | + (inst lea temp (ea (fixnumize offset) nil index)) |
41 | 40 | (inst cmp temp bound)
|
42 | 41 | (inst jmp :a error)
|
43 | 42 | (move result index))))
|
|
75 | 74 | `(inst ,insn ,dest ,source)))
|
76 | 75 | (swap-tn-inst-form (tn-name)
|
77 | 76 | (if (= bitsize 16)
|
78 |
| - `(inst rol ,tn-name 8) |
79 |
| - `(inst bswap ,tn-name)))) |
| 77 | + `(inst rol ,operand-size ,tn-name 8) |
| 78 | + `(inst bswap ,operand-size ,tn-name)))) |
80 | 79 | `(define-vop (,name)
|
81 | 80 | (:translate ,internal-name)
|
82 | 81 | (:policy :fast-safe)
|
|
97 | 96 | (:generator 3
|
98 | 97 | (let* ((base-disp (- (* vector-data-offset n-word-bytes)
|
99 | 98 | other-pointer-lowtag))
|
100 |
| - (result-in-size (reg-in-size result ,operand-size)) |
101 | 99 | ,@(when setterp
|
102 | 100 | `((value (reg-in-size value* ,operand-size))))
|
103 | 101 | ,@(when (and setterp big-endian-p)
|
104 | 102 | `((temp (reg-in-size temp ,operand-size))))
|
105 | 103 | (memref (sc-case index
|
106 | 104 | (immediate
|
107 |
| - (make-ea ,operand-size :base vector |
108 |
| - :disp (+ (tn-value index) base-disp))) |
| 105 | + (ea (+ (tn-value index) base-disp) vector)) |
109 | 106 | (t
|
110 |
| - (make-ea ,operand-size |
111 |
| - :base vector :index index |
112 |
| - :disp base-disp))))) |
113 |
| - (declare (ignorable result-in-size)) |
| 107 | + (ea base-disp vector index))))) |
114 | 108 | ,@(when (and setterp big-endian-p)
|
115 | 109 | `((inst mov temp value)
|
116 | 110 | ,(swap-tn-inst-form 'temp)))
|
117 | 111 | ,(if setterp
|
118 |
| - `(inst mov memref ,(if big-endian-p |
| 112 | + `(inst mov ,operand-size memref ,(if big-endian-p |
119 | 113 | 'temp
|
120 | 114 | 'value))
|
121 | 115 | (movx ref-mov-insn
|
122 | 116 | (if (and big-endian-p (= bitsize 32))
|
123 |
| - 'result-in-size |
| 117 | + 'result |
124 | 118 | 'result)
|
125 | 119 | 'memref operand-size))
|
126 | 120 | ,@(if setterp
|
127 | 121 | '((move result value*))
|
128 | 122 | (when big-endian-p
|
129 | 123 | `(,(swap-tn-inst-form (if (/= bitsize 64)
|
130 |
| - 'result-in-size |
| 124 | + 'result |
131 | 125 | 'result))
|
132 | 126 | ,(when (and (/= bitsize 64) signedp)
|
133 |
| - (movx 'movsx 'result 'result-in-size |
| 127 | + (movx 'movsx 'result 'result |
134 | 128 | operand-size))))))))))))
|
135 | 129 | (loop for i from 0 upto #b10111
|
136 | 130 | for bitsize = (ecase (ldb (byte 2 3) i)
|
|
0 commit comments