Changeset 8076
- Timestamp:
- Jan 15, 2008, 3:13:22 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ia32/compiler/X86/x86-lapmacros.lisp
r7242 r8076 70 70 (target-arch-case 71 71 (:x8632 72 (assert (x86-acc-reg-p dest) () "dest reg must be accumulator") 73 `(progn 74 (movb ($ x8632::tagmask) (%b ,dest)) 75 (andl (%l ,node) (%l ,dest)))) 72 (if (x86-byte-reg-p dest) 73 `(progn 74 (movb ($ x8632::tagmask) (%b ,dest)) 75 (andl (%l ,node) (%l ,dest))) 76 `(progn 77 (movl ($ x8632::tagmask) (% ,dest)) 78 (andl (%l ,node) (%l ,dest))))) 76 79 (:x8664 77 80 `(progn … … 152 155 (:x8632 153 156 `(progn 154 (test b ($ x8632::tagmask) (%b,node))157 (test ($ x8632::tagmask) (% ,node)) 155 158 (je.pt ,ok) 156 159 (uuo-error-reg-not-fixnum (% ,node)) … … 192 195 193 196 (defx86lapmacro get-single-float (node dest) 194 `(progn 195 (movd (% ,node) (% ,dest)) 196 (psrlq ($ 32) (% ,dest)))) 197 198 199 ;;; Note that this modifies the src argument. 197 (target-arch-case 198 (:x8632 199 `(movss (@ x8632::single-float.value (% ,node)) (% ,dest))) 200 (:x8664 201 `(progn 202 (movd (% ,node) (% ,dest)) 203 (psrlq ($ 32) (% ,dest)))))) 204 205 ;;; Note that this modifies the src argument in the x8664 case. 200 206 (defx86lapmacro put-single-float (src node) 201 `(progn 202 (psllq ($ 32) (% ,src)) 203 (movd (% ,src) (% ,node)) 204 (movb ($ x8664::tag-single-float) (%b ,node)))) 207 (target-arch-case 208 (:x8632 209 `(movss (% ,src) (@ x8632::single-float.value (% ,node)))) 210 (:x8664 211 `(progn 212 (psllq ($ 32) (% ,src)) 213 (movd (% ,src) (% ,node)) 214 (movb ($ x8664::tag-single-float) (%b ,node)))))) 205 215 206 216 (defx86lapmacro get-double-float (src fpreg) … … 266 276 (:x8632 267 277 `(progn 268 (mov q($ (lognot 255)) (% ,dest))269 (and q(@ x8632::misc-header-offset (% ,vector)) (% ,dest))278 (movl ($ (lognot 255)) (% ,dest)) 279 (andl (@ x8632::misc-header-offset (% ,vector)) (% ,dest)) 270 280 (shr ($ (- x8632::num-subtag-bits x8632::fixnumshift)) (% ,dest)))) 271 281 (:x8664 … … 276 286 277 287 (defx86lapmacro int-to-double (int temp double) 278 `(progn 279 (unbox-fixnum ,int ,temp) 280 (cvtsi2sdq (% ,temp) (% ,double)))) 288 (target-arch-case 289 (:x8632 290 `(progn 291 (unbox-fixnum ,int ,temp) 292 (cvtsi2sdl (% ,temp) (% ,double)))) 293 (:x8664 294 `(progn 295 (unbox-fixnum ,int ,temp) 296 (cvtsi2sdq (% ,temp) (% ,double)))))) 281 297 282 298 (defx86lapmacro int-to-single (int temp single) 283 `(progn 284 (unbox-fixnum ,int ,temp) 285 (cvtsi2ssq (% ,temp) (% ,single)))) 299 (target-arch-case 300 (:x8632 301 `(progn 302 (unbox-fixnum ,int ,temp) 303 (cvtsi2ssl (% ,temp) (% ,single)))) 304 (:x8664 305 `(progn 306 (unbox-fixnum ,int ,temp) 307 (cvtsi2ssq (% ,temp) (% ,single)))))) 286 308 287 309 (defx86lapmacro ref-global (global reg) … … 367 389 (:x8632 368 390 `(progn 369 (movz xwl (% nargs) (% imm0))391 (movzwl (% nargs) (% imm0)) 370 392 (subl ($ (* $numx8632argregs x8632::node-size)) (% imm0)) 371 393 (jle ,push) 372 394 (movl (% ebp) (@ 4 (% esp) (% imm0))) 373 (lea q(@ 4 (% esp) (% imm0)) (% ebp))395 (leal (@ 4 (% esp) (% imm0)) (% ebp)) 374 396 (popl (@ (% ebp))) 375 397 (jmp ,done) … … 512 534 ;;; those couple of instructions. 513 535 514 ;;; The above comment appears to be stale.515 ;;; %fn (which is distinct from %fname) will be pointing to516 ;;; the current function, so it won't get GCed out from under us.517 536 (defx86lapmacro jump-symbol (name nargs) 518 537 (target-arch-case … … 556 575 (push (% arg_z)) 557 576 ,done))))) 558 577 578 ;;; clears reg 579 (defx86lapmacro mark-as-node (reg) 580 (let* ((regnum (logand #x7 (x86::gpr-ordinal (string reg)))) 581 (bit (ash 1 regnum))) 582 `(progn 583 (xorl (% ,reg) (% ,reg)) 584 (orb ($ ,bit) (@ (% :rcontext) x8632::tcr.node-regs-mask))))) 585 586 (defx86lapmacro mark-as-imm (reg) 587 (let* ((regnum (logand #x7 (x86::gpr-ordinal (string reg)))) 588 (bit (ash 1 regnum))) 589 `(progn 590 (andb ($ (lognot ,bit)) (@ (% :rcontext) x8632::tcr.node-regs-mask))))) 591
Note: See TracChangeset
for help on using the changeset viewer.