Changeset 9934


Ignore:
Timestamp:
Jul 10, 2008, 8:41:00 AM (11 years ago)
Author:
gb
Message:

Use 32-bit comparisons when checking nargs (depends on kernel changes
to always set all bits of nargs, not just the low 16).

COMPARE-CONSTANT-TO-REGISTER.

Rename TRAP-UNLESS-TYPECODE= to TRAP-UNLESS-SUBTAG= : all callers
want a vector subtag, and we can trap earlier on non-misc-tagged
things.

Do some inlined shifts a little differently.

Remove branch-prediction suffices, which take a little space and
have no real effect.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/working-0711/ccl/compiler/X86/X8664/x8664-vinsns.lisp

    r9630 r9934  
    307307  :resume
    308308  ((:pred = n 0)
    309    (testw (:%w x8664::nargs) (:%w x8664::nargs)))
     309   (testl (:%l x8664::nargs) (:%l x8664::nargs)))
    310310  ((:not (:pred = n 0))
    311    (cmpw (:$w (:apply ash n x8664::word-shift)) (:%w x8664::nargs)))
     311   ((:pred < n 16)
     312   (cmpl (:$b (:apply ash n x8664::word-shift)) (:%l x8664::nargs)))
     313   ((:pred >= n 16)
     314    (cmpl (:$l (:apply ash n x8664::word-shift)) (:%l x8664::nargs))))
    312315  (jne :bad)
    313316  (:anchored-uuo-section :resume)
     
    319322  :resume
    320323  ((:pred = min 1)
    321    (testw (:%w x8664::nargs) (:%w x8664::nargs))
     324   (testl (:%l x8664::nargs) (:%l x8664::nargs))
    322325   (je :toofew))
    323326  ((:not (:pred = min 1))
    324    (rcmpw (:%w x8664::nargs) (:$w (:apply ash min x8664::word-shift)))
     327   ((:pred < min 16)
     328    (rcmpl (:%l x8664::nargs) (:$b (:apply ash min x8664::word-shift))))
     329   ((:pred >= min 16)
     330    (rcmpl (:%l x8664::nargs) (:$l (:apply ash min x8664::word-shift))))
    325331   (jb :toofew)) 
    326332 
     
    332338                                       ((n :u16const)))
    333339  :resume
    334   (rcmpw (:%w x8664::nargs) (:$w (:apply ash n x8664::word-shift)))
     340  ((:pred < n 16)
     341   (rcmpl (:%l x8664::nargs) (:$b (:apply ash n x8664::word-shift))))
     342  ((:pred >= n 16)
     343   (rcmpl (:%l x8664::nargs) (:$l (:apply ash n x8664::word-shift))))
    335344  (ja :bad)
    336345 
     
    345354  :resume
    346355  ((:pred = min 1)
    347    (testw (:%w x8664::nargs) (:%w x8664::nargs))
     356   (testl (:%l x8664::nargs) (:%l x8664::nargs))
    348357   (je :toofew))
    349358  ((:not (:pred = min 1))
    350    (rcmpw (:%w x8664::nargs) (:$w (:apply ash min x8664::word-shift)))
     359   ((:pred < min 16)
     360    (rcmpl (:%l x8664::nargs) (:$b (:apply ash min x8664::word-shift))))
     361   ((:pred >= min 16)
     362    (rcmpl (:%l x8664::nargs) (:$l (:apply ash min x8664::word-shift))))
    351363   (jb :toofew))
    352   (rcmpw (:%w x8664::nargs) (:$w (:apply ash max x8664::word-shift)))
     364  ((:pred < max 16)
     365   (rcmpl (:%l x8664::nargs) (:$b (:apply ash max x8664::word-shift))))
     366  ((:pred >= max 16)
     367   (rcmpl (:%l x8664::nargs) (:$l (:apply ash max x8664::word-shift))))
    353368  (ja :toomany)
    354369 
     
    363378(define-x8664-vinsn default-1-arg (()
    364379                                   ((min :u16const)))
    365   (rcmpw (:%w x8664::nargs) (:$w (:apply ash min x8664::word-shift)))
     380  ((:pred < min 16)
     381   (rcmpl (:%l x8664::nargs) (:$b (:apply ash min x8664::word-shift))))
     382  ((:pred >= min 16)
     383   (rcmpl (:%l x8664::nargs) (:$l (:apply ash min x8664::word-shift))))
    366384  (jne :done)
    367385  ((:pred >= min 3)
     
    377395(define-x8664-vinsn default-2-args (()
    378396                                    ((min :u16const)))
    379   (rcmpw (:%w x8664::nargs ) (:$w (:apply ash (:apply 1+ min) x8664::word-shift)))
     397  ((:pred < (:apply 1+ min) 16)
     398   (rcmpl (:%l x8664::nargs ) (:$b (:apply ash (:apply 1+ min) x8664::word-shift))))
     399  ((:pred >= (:apply 1+ min) 16)
     400   (rcmpl (:%l x8664::nargs ) (:$l (:apply ash (:apply 1+ min) x8664::word-shift))))
    380401  (ja :done)
    381402  (je :one)
     
    402423(define-x8664-vinsn default-3-args (()
    403424                                    ((min :u16const)))
    404   (rcmpw (:%w x8664::nargs ) (:$w (:apply ash (:apply + 2 min) x8664::word-shift)))
     425  ((:pred < (:apply + 2 min) 16)
     426   (rcmpl (:%l x8664::nargs ) (:$b (:apply ash (:apply + 2 min) x8664::word-shift))))
     427  ((:pred >= (:apply + 2 min) 16)
     428   (rcmpl (:%l x8664::nargs ) (:$l (:apply ash (:apply + 2 min) x8664::word-shift))))
    405429  (ja :done)
    406430  (je :two)
    407   (rcmpw (:%w x8664::nargs ) (:$w (:apply ash min x8664::word-shift)))
     431  ((:pred < min 16)
     432   (rcmpl (:%l x8664::nargs ) (:$b (:apply ash min x8664::word-shift))))
     433  ((:pred >= min 16)
     434   (rcmpl (:%l x8664::nargs ) (:$l (:apply ash min x8664::word-shift))))
    408435  (je :none)
    409436  ;; The first (of three) &optional args was supplied.
     
    440467                                       ((n :u16const))
    441468                                       ((temp :u64)))
    442   (rcmpw (:%w x8664::nargs) (:$w (:apply ash n x8664::word-shift)))
    443   (movzwl (:%w x8664::nargs) (:%l temp))
     469  ((:pred < n 16)
     470   (rcmpl (:%l x8664::nargs) (:$b (:apply ash n x8664::word-shift))))
     471  ((:pred >= n 16)
     472   (rcmpl (:%l x8664::nargs) (:$l (:apply ash n x8664::word-shift))))
     473  (movl (:%l x8664::nargs) (:%l temp))
    444474  (jae :done)
    445475  :loop
     
    448478   (cmpl (:$b (:apply ash n x8664::word-shift)) (:%l temp)))
    449479  ((:pred >= n 16)
    450    (cmpl (:$l (:apply ash n x8664::word-shift)) (:%l temp)))
     480   (cmpl (:$l (:apply ash n x8664::word-shift)) (:%l temp))) 
    451481  (pushq (:$l x8664::nil-value))
    452482  (jne :loop)
     
    469499                                                          ()
    470500                                                          ((temp :u64)))
    471   (movzwl (:%w x8664::nargs) (:%l temp))
     501  (movl (:%l x8664::nargs) (:%l temp))
    472502  (subq (:$b (* $numx8664argregs x8664::node-size)) (:%q temp))
    473503  (jle :push)
     
    486516                                                ()
    487517                                                ((temp :u64)))
    488   (movzwl (:%w x8664::nargs) (:%l temp))
     518  (movl (:%l x8664::nargs) (:%l temp))
    489519  (subq (:$b (* $numx8664argregs x8664::node-size)) (:%q temp))
    490520  (movq (:%q x8664::rbp) (:@ x8664::node-size (:%q x8664::rsp) (:%q temp)))
     
    561591  (cmpb (:$b x8664::fulltag-nil) (:%b arg0)))
    562592
     593(define-x8664-vinsn compare-to-t (()
     594                                    ((arg0 t)))
     595  (cmpq (:$l x8664::t-value) (:%q arg0)))
    563596
    564597(define-x8664-vinsn ref-constant (((dest :lisp))
    565598                                  ((lab :label)))
    566599  (movq (:@ (:^ lab) (:%q x8664::fn)) (:%q dest)))
     600
     601(define-x8664-vinsn compare-constant-to-register (()
     602                                                  ((lab :label)
     603                                                   (reg :lisp)))
     604  (cmpq (:@ (:^ lab) (:%q x8664::fn)) (:%q reg)))
     605
    567606
    568607(define-x8664-vinsn (vpush-constant :push :node :vsp) (()
     
    690729                                           
    691730
    692 (define-x8664-vinsn trap-unless-typecode= (()
     731(define-x8664-vinsn trap-unless-subtag= (()
    693732                                           ((object :lisp)
    694733                                            (tagval :u16const))
     
    698737  (andl (:$b x8664::tagmask) (:%l tag))
    699738  (cmpl (:$b x8664::tag-misc) (:%l tag))
    700   (jne :have-tag)
    701   ;; This needs to be a sign-extending mov, since the cmpl below
    702   ;; will sign-extend the 8-bit constant operand.
    703   (movsbl (:@ x8664::misc-subtag-offset (:%q object)) (:%l tag))
    704   :have-tag
    705   (cmpl (:$b tagval) (:%l tag))
     739  (jne :bad)
     740  (cmpb (:$b tagval) (:@ x8664::misc-subtag-offset (:%q object)))
    706741  (jne :bad)
    707742  (:anchored-uuo-section :resume)
     
    9721007  (sarq (:$ub (- x8664::nbits-in-word (+ 16 x8664::fixnumshift))) (:%q dest))
    9731008  (cmpq (:%q src) (:%q dest))
    974   (je :bad)
     1009  (jne :bad)
    9751010  (testb (:$b x8664::fixnummask) (:%b dest))
    9761011  (jne :bad)
     
    11941229     ((header (:u64 #.x8664::imm0))
    11951230      (scaled-size (:u64 #.x8664::imm1))))
    1196   (jno.pt no-overflow)
     1231  (jno no-overflow)
    11971232  (movq (:%q val) (:%q scaled-size))
    11981233  (sarq (:$ub x8664::fixnumshift) (:%q scaled-size))
     
    13941429(define-x8664-vinsn (push-argregs :push :node :vsp) (()
    13951430                                                      ())
    1396   (testw (:%w x8664::nargs) (:%w x8664::nargs))
     1431  (testl (:%l x8664::nargs) (:%l x8664::nargs))
    13971432  (jz :done)
    1398   (rcmpw (:%w x8664::nargs) (:$w (* 2 x8664::node-size)))
     1433  (rcmpl (:%l x8664::nargs) (:$b (* 2 x8664::node-size)))
    13991434  (jb :one)
    14001435  (je :two)
     
    14091444                                                         ((max :u32const)))
    14101445  ((:pred >= max 3)
    1411    (testw (:%w x8664::nargs) (:%w x8664::nargs))
     1446   (testl (:%l x8664::nargs) (:%l x8664::nargs))
    14121447   (jz :done)
    1413    (rcmpw (:%w x8664::nargs) (:$w (* 2 x8664::node-size)))
     1448   (rcmpl (:%l x8664::nargs) (:$b (* 2 x8664::node-size)))
    14141449   (jb :one)
    14151450   (je :two)
     
    14211456   :done)
    14221457  ((:pred = max 2)
    1423    (rcmpw (:%w x8664::nargs) (:$w (* 1 x8664::node-size)))
     1458   (rcmpl (:%l x8664::nargs) (:$b (* 1 x8664::node-size)))
    14241459   (jb :done)
    14251460   (je :one)
     
    14291464   :done)
    14301465  ((:pred = max 1)
    1431    (testw (:%w x8664::nargs) (:%w x8664::nargs))
     1466   (testl (:%l x8664::nargs) (:%l x8664::nargs))
    14321467   (je :done)
    14331468   (pushq (:%q x8664::arg_z))
     
    16431678                             ((n :u16const))
    16441679                             ((imm :u16)))
    1645   (movzwl (:%w x8664::nargs) (:%l x8664::nargs))
    16461680  ((:pred = n 0)
    16471681   (xorl (:%l imm) (:%l imm)))
     
    18611895  (movq (:$l 0) (:@ x8664::interrupt-level-binding-index (:%q temp)))
    18621896  (movq (:%q x8664::rsp) (:@ (:%seg :rcontext) x8664::tcr.db-link))
    1863   (jns.pt :done)
     1897  (jns :done)
    18641898  (btrq (:$ub 63) (:@ (:%seg :rcontext) x8664::tcr.interrupt-pending))
    1865   (jae.pt :done)
     1899  (jae :done)
    18661900  (ud2a)
    18671901  (:byte 2)
     
    19001934  (movq (:%q oldval) (:@ x8664::interrupt-level-binding-index (:%q tlb)))
    19011935  (movq (:%q link) (:@ (:%seg :rcontext) x8664::tcr.db-link))
    1902   (jns.pt :done)
     1936  (jns :done)
    19031937  (testq (:%q oldval) (:%q oldval))
    1904   (js.pt :done)
     1938  (js :done)
    19051939  (btrq (:$ub 63) (:@ (:%seg :rcontext) x8664::tcr.interrupt-pending))
    1906   (jae.pt :done)
     1940  (jae :done)
    19071941  (ud2a)
    19081942  (:byte 2)
     
    20072041  (movb (:$b #x4c) (:@ (+ x8664::misc-data-offset 7) (:%q closure))) ; 1st byte of lea
    20082042  (movq (:%q imm0) (:@ (+ x8664::misc-data-offset 8) (:%q closure))) ; rest of lea, start of jmp
    2009   (movl (:$l #x00516825) (:@ (+ x8664::misc-data-offset 16) (:%q closure)))
     2043  (movl (:$l #x01516825) (:@ (+ x8664::misc-data-offset 16) (:%q closure)))
    20102044  (movb (:$b x8664::function-boundary-marker) (:@ (+ x8664::misc-data-offset 24)  (:%q closure))))
    20112045
     
    21092143  (movl (:%l bitnum) (:%l dest)))
    21102144
    2111 
    21122145(define-x8664-vinsn nref-bit-vector-fixnum (((dest :imm)
    21132146                                             (bitnum :s64))
     
    21182151  (setc (:%b bitnum))
    21192152  (movzbl (:%b bitnum) (:%l bitnum))
    2120   (imull (:$b x8664::fixnumone) (:%l bitnum) (:%l dest)))                                     
     2153  (imull (:$b x8664::fixnumone) (:%l bitnum) (:%l dest)))
     2154
    21212155
    21222156(define-x8664-vinsn nref-bit-vector-flags (()
     
    21322166  (btq (:$ub (:apply logand 63 idx))
    21332167       (:@ (:apply + x8664::misc-data-offset (:apply ash (:apply ash idx -6) x8664::word-shift)) (:%q src)))
    2134   (setb (:%b temp))
    2135   (negb (:%b temp))
    2136   (andl (:$l x8664::fixnumone) (:%l temp))
    2137   (movl (:%l temp) (:%l dest)))
     2168  (setc (:%b temp))
     2169  (movzbl (:%b temp) (:%l temp))
     2170  (imull (:$b x8664::fixnumone) (:%l temp) (:%l dest)))
     2171
    21382172
    21392173(define-x8664-vinsn misc-ref-c-bit-flags (()
     
    26272661  (movq (:%q count) (:%q temp))
    26282662  (sarq (:$ub x8664::fixnumshift) (:%q temp))
    2629   (rcmpq (:%q temp) (:$l 63))
    2630   (cmovbw (:%w temp) (:%w shiftcount))
     2663  (rcmpq (:%q temp) (:$l (- 63 x8664::fixnumshift)))
     2664  (cmovbl (:%l temp) (:%l shiftcount))
    26312665  (movq (:%q src) (:%q temp))
    26322666  (jae :shift-max)
     2667  (addl (:$b x8664::fixnumshift) (:%l shiftcount))
    26332668  (sarq (:%shift x8664::cl) (:%q temp))
    26342669  (jmp :done)
     
    26362671  (sarq (:$ub 63) (:%q temp))
    26372672  :done
    2638   (andb (:$b (lognot x8664::fixnummask)) (:%b temp))
    2639   (movq (:%q temp) (:%q dest)))
     2673  (imulq (:$b x8664::fixnumone) (:%q temp) (:%q dest)))
    26402674
    26412675(define-x8664-vinsn %ilsr (((dest :imm))
     
    26462680  (movq (:%q count) (:%q temp))
    26472681  (sarq (:$ub x8664::fixnumshift) (:%q temp))
    2648   (rcmpq (:%q temp) (:$l 63))
    2649   (cmovbw (:%w temp) (:%w shiftcount))
     2682  (rcmpq (:%q temp) (:$l (- 63 x8664::fixnumshift)))
     2683  (cmovbl (:%l temp) (:%l shiftcount))
    26502684  (movq (:%q src) (:%q temp))
    26512685  (jae :shift-max)
     2686  (addl (:$b x8664::fixnumshift) (:%l shiftcount))
    26522687  (shrq (:%shift x8664::cl) (:%q temp))
    26532688  (jmp :done)
     
    26552690  (shrq (:$ub 63) (:%q temp))
    26562691  :done
    2657   (andb (:$b (lognot x8664::fixnummask)) (:%b temp))
    2658   (movq (:%q temp) (:%q dest)))
     2692  (imulq (:$b x8664::fixnumone) (:%q temp) (:%q dest)))
    26592693
    26602694(define-x8664-vinsn %iasr-c (((dest :imm))
     
    26632697                             ((temp :s64)))
    26642698  (movq (:%q src) (:%q temp))
    2665   (sarq (:$ub count) (:%q temp))
    2666   (andb (:$b (lognot x8664::fixnummask)) (:%b temp))
    2667   (movq (:%q temp) (:%q dest)))
     2699  (sarq (:$ub (:apply + count x8664::fixnumshift)) (:%q temp))
     2700  (imulq (:$b x8664::fixnumone) (:%q temp) (:%q dest)))
    26682701
    26692702(define-x8664-vinsn %ilsr-c (((dest :imm))
     
    26722705                             ((temp :s64)))
    26732706  (movq (:%q src) (:%q temp))
    2674   (shrq (:$ub count) (:%q temp))
    2675   (andb (:$b (lognot x8664::fixnummask)) (:%b temp))
    2676   (movq (:%q temp) (:%q dest)))
     2707  (shrq (:$ub (:apply + count x8664::fixnumshift)) (:%q temp))
     2708  (imulq (:$b x8664::fixnumone) (:%q temp) (:%q dest)))
    26772709
    26782710(define-x8664-vinsn %ilsl (((dest :imm))
     
    27962828  (movl (:%l object) (:%l tag))
    27972829  (andl (:$b x8664::fixnummask) (:%l tag))
    2798   (je.pt :got-it)
     2830  (je :got-it)
    27992831  (cmpl (:$b x8664::tag-misc) (:%l tag))
    28002832  (jne :bad)
     
    30113043  (testl (:$l x8664::fixnummask) (:%l object))
    30123044  (movl (:%l object) (:%l tag))
    3013   (je.pt :ok)
     3045  (je :ok)
    30143046  (andl (:$b x8664::fulltagmask) (:%l tag))
    30153047  (cmpl (:$b x8664::fulltag-misc) (:%l tag))
     
    30283060  (testl (:$l x8664::fixnummask) (:%l object))
    30293061  (movq (:%q object) (:%q tag))
    3030   (je.pt :ok-if-non-negative)
     3062  (je :ok-if-non-negative)
    30313063  (andl (:$b x8664::fulltagmask) (:%l tag))
    30323064  (cmpl (:$b x8664::fulltag-misc) (:%l tag))
     
    30353067  (je :two)
    30363068  (cmpq (:$l x8664::three-digit-bignum-header) (:@ x8664::misc-header-offset (:%q object)))
    3037   (jne.pn :bad)
     3069  (jne :bad)
    30383070  (cmpl (:$b 0) (:@ (+ x8664::misc-data-offset 8) (:%q object)))
    30393071  (je :ok)
     
    31923224                                 ((nfixed :s16const)))
    31933225  ((:pred > nfixed 0)
    3194    (addw (:$w (:apply - (:apply ash nfixed x8664::word-shift))) (:%w x8664::nargs))))
     3226   ((:pred < nfixed 16)
     3227    (subl (:$b (:apply ash nfixed x8664::word-shift)) (:%l x8664::nargs)))
     3228   ((:pred >= nfixed 16)
     3229    (subl (:$l (:apply ash nfixed x8664::word-shift)) (:%l x8664::nargs)))))
    31953230
    31963231(define-x8664-vinsn opt-supplied-p (()
    3197                                     ())
    3198   (movzwl (:%w x8664::nargs) (:%l x8664::nargs))
    3199   (xorl (:%l x8664::imm1) (:%l x8664::imm1))
    3200   (movl (:$l x8664::t-value) (:%l x8664::arg_y))
     3232                                    ((num-opt :u16const))
     3233                                    ((nargs (:u64 #.x8664::nargs))
     3234                                     (imm :imm)))
     3235  (xorl (:%l imm) (:%l imm))
     3236  (movl (:$l x8664::nil-value) (:%l x8664::arg_y))
    32013237  :loop
    3202   (rcmpl (:%l x8664::imm1) (:%l x8664::nargs))
    3203   (movl (:$l x8664::nil-value) (:%l x8664::arg_z))
    3204   (cmovll (:%l x8664::arg_y) (:%l  x8664::arg_z))
    3205   (addl (:$b x8664::node-size) (:%l x8664::imm1))
    3206   (cmpl (:%l x8664::imm1) (:%l x8664::imm0))
     3238  (rcmpl (:%l imm) (:%l nargs))
     3239  (movl (:%l x8664::arg_y) (:%l x8664::arg_z))
     3240  (cmovll (:@ (+ x8664::t-offset x8664::symbol.vcell) (:%l x8664::arg_y)) (:%l  x8664::arg_z))
     3241  (addl (:$b x8664::node-size) (:%l imm))
     3242  (rcmpl (:%l imm) (:$l (:apply ash num-opt x8664::fixnumshift)))
    32073243  (pushq (:%q x8664::arg_z))
    32083244  (jne :loop))
     
    32113247                                        ()
    32123248                                        ((temp :u64)))
    3213   (testw (:%w x8664::nargs) (:%w x8664::nargs))
    3214   (setne (:%b temp))
    3215   (negb (:%b temp))
    3216   (andl (:$b x8664::t-offset) (:%l temp))
    3217   (addl (:$l x8664::nil-value) (:%l temp))
     3249  (testl (:%l x8664::nargs) (:%l x8664::nargs))
     3250  (movl (:$l x8664::nil-value) (:%l temp))
     3251  (cmovnel (:@ (+ x8664::t-offset x8664::symbol.vcell) (:%l temp)) (:%l temp))
    32183252  (pushq (:%q temp)))
    32193253
     
    32223256                                        ((temp0 :u64)
    32233257                                         (temp1 :u64)))
    3224   (rcmpw (:%w x8664::nargs) (:$w x8664::node-size))
    3225   (setae (:%b temp0))
    3226   (seta (:%b temp1))
    3227   (negb (:%b temp0))
    3228   (negb (:%b temp1))
    3229   (andl (:$b x8664::t-offset) (:%l temp0))
    3230   (andl (:$b x8664::t-offset) (:%l temp1))
    3231   (addl (:$l x8664::nil-value) (:%l temp0))
    3232   (addl (:$l x8664::nil-value) (:%l temp1))
     3258  (rcmpl (:%l x8664::nargs) (:$b x8664::node-size))
     3259  (movl (:$l x8664::nil-value) (:%l temp0))
     3260  (movl (:%l temp0) (:%l temp1))
     3261  (cmovael (:@ (+ x8664::t-offset x8664::symbol.vcell) (:%l temp0)) (:%l temp0))
     3262  (cmoval (:@ (+ x8664::t-offset x8664::symbol.vcell) (:%l temp1)) (:%l temp1))
     3263  (pushq (:%q temp0))
     3264  (pushq (:%q temp1)))
     3265
     3266(define-x8664-vinsn one-opt-supplied-p (()
     3267                                        ()
     3268                                        ((temp :u64)))
     3269  (testl (:%l x8664::nargs) (:%l x8664::nargs))
     3270  (movl (:$l x8664::nil-value) (:%l temp))
     3271  (cmovnel (:@ x8664::t-offset (:%l temp)) (:%l temp))
     3272  (pushq (:%q temp)))
     3273
     3274(define-x8664-vinsn two-opt-supplied-p (()
     3275                                        ()
     3276                                        ((temp0 :u64)
     3277                                         (temp1 :u64)))
     3278  (rcmpl (:%l x8664::nargs) (:$b x8664::node-size))
     3279  (movl (:$l x8664::nil-value) (:%l temp0))
     3280  (movl (:%l temp0) (:%l temp1))
     3281  (cmovael (:@ x8664::t-offset (:%l temp0)) (:%l temp0))
     3282  (cmoval (:@ x8664::t-offset (:%l temp1)) (:%l temp1))
    32333283  (pushq (:%q temp0))
    32343284  (pushq (:%q temp1)))
     
    32993349   (pushq (:%q x8664::arg_z)))
    33003350  ((:pred = min-fixed 2)                ; at least 2 args
    3301    (cmpw (:$w (ash 2 x8664::word-shift)) (:%w x8664::nargs))
     3351   (cmpl (:$b (ash 2 x8664::word-shift)) (:%l x8664::nargs))
    33023352   (je :yz2)                      ; skip arg_x if exactly 2
    33033353   (pushq (:%q x8664::arg_x))
     
    33063356   (pushq (:%q x8664::arg_z)))
    33073357  ((:pred = min-fixed 1)                ; at least one arg
    3308    (rcmpw (:%w x8664::nargs) (:$w  (ash 2 x8664::word-shift)))
     3358   (rcmpl (:%l x8664::nargs) (:$b  (ash 2 x8664::word-shift)))
    33093359   (jl :z1)                       ; branch if exactly one
    33103360   (je :yz1)                      ; branch if exactly two
     
    33153365   (pushq (:%q x8664::arg_z)))
    33163366  ((:pred = min-fixed 0)
    3317    (testw (:%w x8664::nargs) (:%w x8664::nargs))
     3367   (testl (:%l x8664::nargs) (:%l x8664::nargs))
    33183368   (je  :none)                     ; exactly zero
    3319    (rcmpw (:%w x8664::nargs) (:$w (ash 2 x8664::word-shift)))
     3369   (rcmpl (:%l x8664::nargs) (:$b (ash 2 x8664::word-shift)))
    33203370   (je :yz0)                      ; exactly two
    33213371   (jl :z0)                       ; one
     
    33283378   :none
    33293379   )
    3330   (movzwl (:%w x8664::nargs) (:%l x8664::nargs))
    33313380  ((:not (:pred = min-fixed 0))
    33323381   (leaq (:@ (:apply - (:apply ash min-fixed x8664::word-shift)) (:%q x8664::nargs))
     
    36393688                               ()
    36403689                               ((imm0 :u64)))
    3641   (movzwl (:%w x8664::nargs) (:%l x8664::nargs))
    36423690  (leaq (:@ (:%q x8664::rsp) (:%q x8664::nargs)) (:%q imm0))
    36433691  (subq (:@ (:%q imm0)) (:%q x8664::nargs))
     
    38653913(define-x8664-vinsn pop-argument-registers (()
    38663914                                            ())
    3867   (testw (:%w x8664::nargs) (:%w x8664::nargs))
     3915  (testl (:%l x8664::nargs) (:%l x8664::nargs))
    38683916  (je :done)
    3869   (rcmpw (:%w x8664::nargs) (:$w (ash 2 x8664::word-shift)))
     3917  (rcmpl (:%l x8664::nargs) (:$b (ash 2 x8664::word-shift)))
    38703918  (popq (:%q x8664::arg_z))
    38713919  (jb :done)
     
    44864534  (:align 4))
    44874535
     4536
     4537 
     4538
    44884539(queue-fixup
    44894540 (fixup-x86-vinsn-templates
Note: See TracChangeset for help on using the changeset viewer.