Ignore:
Timestamp:
Aug 3, 2010, 4:05:10 AM (10 years ago)
Author:
gb
Message:

Yet another scheme for subprim calls. Go ahead and laugh.
Details:

  • ba/bla are new pseudo instructions, identical to b/bl except that their operands are subprim names (or addresses).
  • for each subprim name/address referenced in a ba/bla instruction, the assembler generates an:

(ldr pc (:= data-word-containing-subprim-address))

instruction and makes the ba/bla branch to that instruction.

  • this is the only use of the "constant pool" and there are no longer user-visible directives for referencing pc-relative data. (We can load 32-bit integer constants via movw/movt instructions and initialize FPRs to constants via GPRs.)
  • by default, the disassembler hides this and shows ba/bla instructions.

Compared to the scheme of a few days ago, it's about the same speed
(b/bl to LDR vs mov reg/bx reg). If a subprim's called once per function
it's a little bigger; if there's more than one call site, it can be smaller.
(And we don't have to find a temp register.) If we can map the subprims
to addresses within 32MB of the pure area, then purify can turn the PC-relative
branches/bls to the LDR instructions into direct branches/bls to the code.

Compared to the original scheme (branch/bl to mov pc, #n) we don't flush
the pipeline on every call and don't have any constraints on subprimitive
addresses (they don't have to be expressible as ARM constants.)

Location:
branches/arm/level-0/ARM
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • branches/arm/level-0/ARM/arm-array.lisp

    r14104 r14111  
    142142  (beq @word-set-loop)
    143143  @bad
    144   (load-subprim temp0 .SPksignalerr)
    145144  (mov arg_x  '#.$xnotelt)
    146145  (set-nargs 3)
    147   (blx temp0)
     146  (bla .SPksignalerr)
    148147  @fixnum
    149148  (tst val (:$ arm::fixnum-mask))
     
    259258    (add offset offset disp)
    260259    (ble  @loop)
    261     (load-subprim imm0 .SPvalues)
    262260    (mov temp0 vsp)
    263261    (vpush1 a)
    264262    (vpush1 offset)
    265263    (set-nargs 2)
    266     (bx imm0)))
     264    (ba .SPvalues)))
    267265
    268266(defarmlapfunction %boole-clr ((len 0) (b0 arg_x) (b1 arg_y) (dest arg_z))
     
    531529
    532530(defarmlapfunction %aref2 ((array arg_x) (i arg_y) (j arg_z))
    533   (load-subprim imm0 .SParef2)
    534531  (check-nargs 3)
    535   (bx imm0))
     532  (ba .SParef2))
    536533
    537534(defarmlapfunction %aref3 ((array 0) (i arg_x) (j arg_y) (k arg_z))
    538   (load-subprim imm0 .SParef3)
    539535  (check-nargs 4)
    540536  (vpop1 temp0)
    541   (bx imm0))
     537  (ba .SParef3))
    542538
    543539
    544540(defarmlapfunction %aset2 ((array 0) (i arg_x) (j arg_y) (newval arg_z))
    545   (load-subprim imm0 .SPaset2)
    546541  (check-nargs 4)
    547542  (vpop1 temp0)
    548   (bx imm0))
     543  (ba .SPaset2))
    549544
    550545(defarmlapfunction %aset3 ((array #.target::node-size) (i 0) (j arg_x) (k arg_y)  (newval arg_z))
    551   (load-subprim imm0 .SPaset3)
    552546  (check-nargs 5)
    553547  (vpop1 temp0)
    554548  (vpop1 temp1)
    555   (bx imm0))
     549  (ba .SPaset3))
    556550 
    557551
  • branches/arm/level-0/ARM/arm-bignum.lisp

    r14104 r14111  
    3232  (digit-h temp0 imm0)
    3333  (digit-l temp1 imm0)
    34   (load-subprim imm0 .SPvalues)
    3534  (vpush1 temp0)
    3635  (vpush1 temp1)
    3736  (add temp0 vsp (:$ 8))                 
    3837  (set-nargs 2)                         
    39   (bx imm0))
     38  (ba .SPvalues))
    4039
    4140
     
    158157    (digit-h temp0 b)
    159158    (digit-l temp1 b)
    160     (load-subprim imm0 .SPvalues)
    161159    (vpush1 temp0)
    162160    (vpush1 temp1)
    163161    (add temp0 vsp '2)
    164162    (set-nargs 2)
    165     (bx imm0)))
     163    (ba .SPvalues)))
    166164
    167165
     
    294292    (digit-h temp0 b)
    295293    (digit-l temp1 b)
    296     (load-subprim imm0 .SPvalues)
    297294    (vpush temp0)
    298295    (vpush temp1)
    299296    (add temp0 vsp (:$ 8))
    300297    (set-nargs 2)
    301     (bx imm0)))
     298    (ba .SPvalues)))
    302299
    303300
     
    334331    (vpush1 temp1)
    335332    (vpush1 c)
    336     (load-subprim imm0 .SPvalues)
    337333    (add temp0 vsp (:$ 20))
    338334    (set-nargs 3)
    339     (bx imm0)))
     335    (ba .SPvalues)))
    340336
    341337
     
    347343    (vpush1 temp0)
    348344    (digit-l temp0 a)
    349     (load-subprim imm0 .SPvalues)
    350345    (vpush1 temp0)
    351346    (add temp0 vsp (:$ 8))
    352347    (set-nargs 2)
    353     (bx imm0)))
     348    (ba .SPvalues)))
    354349
    355350
     
    395390    (digit-h temp2 lo)
    396391    (digit-l arg_z lo)
    397     (load-subprim imm0 .SPvalues)
    398392    (vpush1 temp0)
    399393    (vpush1 temp1)
     
    402396    (set-nargs 4)
    403397    (add temp0 vsp (:$ 16))
    404     (bx imm0)))
     398    (ba .SPvalues)))
    405399
    406400
     
    938932    (vpush1 temp0)
    939933    (digit-l temp0 guess)
    940     (load-subprim imm0 .SPvalues)
    941934    (vpush1 temp0)
    942935    (add temp0 vsp (:$ 20))
    943936    (add sp sp (:$ 32))
    944937    (set-nargs 2)
    945     (bx imm0)))
     938    (ba .SPvalues)))
    946939
    947940(defarmlapfunction normalize-bignum-loop ((sign arg_x)(res arg_y)(len arg_z))
     
    11241117    (vector-length len bignum imm0)
    11251118    (mov imm2 (:$ 0))
    1126     (load-subprim temp1 .SPudiv64by32)
    11271119    (b @next)
    11281120    @loop
     
    11311123    (mov imm1 imm2)
    11321124    (compose-digit imm2 yhi ylo)
    1133     (blx temp1)
     1125    (bla .SPudiv64by32)
    11341126    (add imm1 len (:$ arm::misc-data-offset))
    11351127    (str imm0 (:@ res imm1))
     
    11391131    (digit-h yhi imm2)
    11401132    (digit-l ylo imm2)
    1141     (load-subprim imm0 .SPnvalret)
    11421133    (vpush1 yhi)
    11431134    (vpush1 ylo)
    11441135    (set-nargs 2)
    1145     (bx imm0)))
     1136    (ba .SPnvalret)))
    11461137
    11471138;;; For TRUNCATE-BY-FIXNUM et al.
     
    11521143    (vector-length len x imm0)
    11531144    (mov imm2 (:$ 0))
    1154     (load-subprim temp0 .SPudiv64by32)
    11551145    (b @next)
    11561146    @loop
     
    11591149    (mov imm1 imm2)
    11601150    (compose-digit imm2 yhi ylo)
    1161     (blx temp0)
     1151    (bla .SPudiv64by32)
    11621152    @next
    11631153    (subs len len '1)
     
    11651155    (digit-h yhi imm2)
    11661156    (digit-l ylo imm2)
    1167     (load-subprim imm0 .SPnvalret)
    11681157    (vpush1 yhi)
    11691158    (vpush1 ylo)
    11701159    (set-nargs 2)
    1171     (bx imm0)))
     1160    (ba .SPnvalret)))
    11721161   
    11731162   
     
    12801269  (build-lisp-frame imm0 imm1)
    12811270  (mov fn nfn)
    1282   (load-subprim temp1 .SPnvalret)
    1283   (load-subprim temp2 .SPudiv64by32)
    12841271  (ldr temp0 (:@ vsp (:$ x-stk)))
    12851272  (add imm0 xidx (:$ arm::misc-data-offset))
     
    13001287  (add imm1 imm1 (:$ arm::node-size))
    13011288  (ldr imm1 (:@ temp0 imm1))
    1302   (blx temp2)
     1289  (bla .SPudiv64by32)
    13031290  (mov arg_y '-1)
    13041291  (and arg_y arg_y (:lsr imm0 (:$ (- 16 arm::fixnumshift))))
     
    13081295  (stmdb (:! vsp) (arg_z arg_y))
    13091296  (set-nargs 2)
    1310   (bx temp1))
     1297  (ba .SPnvalret))
    13111298
    13121299;;; Karatsuba multiplication stuff. NYI.
  • branches/arm/level-0/ARM/arm-clos.lisp

    r14104 r14111  
    199199(defarmlapfunction unset-fin-trampoline ()
    200200  (build-lisp-frame)
    201   (load-subprim imm0 .SPheap-rest-arg)
    202   (blx imm0)                ; cons up an &rest arg, vpush it
     201  (bla .SPheap-rest-arg)                 ; cons up an &rest arg, vpush it
    203202  (vpop1 arg_z)                          ; whoops, didn't really want to
    204   (load-subprim imm0 .SPksignalerr)
    205203  (mov arg_x '#.$XNOFINFUNCTION)
    206204  (mov arg_y nfn)
    207205  (set-nargs 3)
    208   (blx imm0)
     206  (bla .SPksignalerr)
    209207  (mov arg_z 'nil)
    210208  (return-lisp-frame))
  • branches/arm/level-0/ARM/arm-def.lisp

    r14104 r14111  
    6969(defarmlapfunction %fixnum-ref-natural ((fixnum arg_y) #| &optional |# (offset arg_z))
    7070  (:arglist (fixnum &optional offset))
    71   (load-subprim imm1 .SPmakeu32)
    7271  (check-nargs 1 2)
    7372  (cmp nargs '1)
     
    7675  (unbox-fixnum imm0 offset)
    7776  (ldr imm0 (:@ imm0 fixnum))
    78   (bx imm1))
     77  (ba .SPmakeu32))
    7978
    8079
     
    206205  (cmp imm0 (:$ arm::subtag-function))
    207206  (ldr lr (:@ p (:$ arm::lisp-frame.savelr)))
    208   (load-subprim temp0 .SPnvalret)
    209207  (bne @no)
    210208  (ldr arg_x (:@ arg_y (:$ (+ arm::node-size arm::misc-data-offset))))
     
    220218  @go
    221219  (set-nargs 2)
    222   (bx temp0)
     220  (ba .SPnvalret)
    223221  @no
    224222  (mov imm0 'nil)
     
    958956      (bx lr)
    959957      @unsigned-doubleword
    960       (load-subprim temp0 .SPmakeu64)
    961       (bx temp0)
     958      (ba .SPmakeu64)
    962959      @signed-doubleword
    963       (load-subprim temp0 .SPmakes64)
    964       (bx temp0))
     960      (ba .SPmakes64))
    965961
    966962  ;;; This is just here so that we can jump to a subprim from lisp.
     
    11171113  (mov arm::next-method-context magic)
    11181114  (mov arm::nfn function)
    1119   (load-subprim temp0 .SPspread-lexprz)
    11201115  (set-nargs 0)
    11211116  (build-lisp-frame)
    1122   (blx temp0)
     1117  (bla .SPspread-lexprz)
    11231118  (ldr lr (:@ sp (:$ arm::lisp-frame.savelr)))
    11241119  ;; Nothing's changed FN.
     
    11391134  (mov arm::next-method-context magic)
    11401135  (mov arm::nfn function)
    1141   (load-subprim temp0 .SPspreadargZ)
    11421136  (set-nargs 0)
    11431137  (build-lisp-frame)
    1144   (blx temp0)
     1138  (bla .SPspreadargZ)
    11451139  (ldr lr (:@ sp (:$ arm::lisp-frame.savelr)))
    11461140  ;; Nothing's changed FN.
     
    12221216  (sub nargs nargs '2)                  ; remove count for butlast & last
    12231217  (build-lisp-frame)
    1224   (load-subprim imm0 .SPspreadargz)
    1225   (blx imm0)
     1218  (bla .SPspreadargz)
    12261219  (cmp nargs '3)
    12271220  (ldr lr (:@ sp (:$ arm::lisp-frame.savelr)))
    12281221  (discard-lisp-frame)
    1229   (load-subprim imm0 .SPfuncall)
    12301222  (add nargs nargs '1)                  ; count for last
    12311223  (strhs arg_x (:@! vsp (:$ -4)))
     
    12341226  (mov arg_z temp0)
    12351227  (ldr nfn (:@ nfn 'funcall))
    1236   (bx imm0))
     1228  (ba .SPfuncall))
    12371229
    12381230
  • branches/arm/level-0/ARM/arm-float.lisp

    r14104 r14111  
    110110  (vpush1 imm0)   ; hi 25 bits of mantissa (includes implied 1)
    111111  (vpush1 imm1)   ; lo 28 bits of mantissa
    112   (load-subprim imm0 .SPvalues)
    113112  (vpush1 temp1)  ; exp
    114113  (vpush1 temp0)  ; sign
    115114  (set-nargs 4)
    116115  (add temp0 vsp '4)
    117   (bx imm0))
     116  (ba .SPvalues))
    118117
    119118
     
    532531(defarmlapfunction %single-float-sqrt! ((src arg_y) (dest arg_z))
    533532  (build-lisp-frame)
    534   (load-subprim temp0 .SPcheck-fpu-exception)
    535533  (get-single-float s0 src imm0)
    536534  (fmrx imm0 fpscr)
     
    538536  (fmxr fpscr imm0)
    539537  (fsqrts s1 s0)
    540   (blx temp0)
     538  (bla .SPcheck-fpu-exception)
    541539  (put-single-float s1 dest imm0)
    542540  (return-lisp-frame))
     
    546544(defarmlapfunction %double-float-sqrt! ((src arg_y) (dest arg_z))
    547545  (build-lisp-frame)
    548   (load-subprim temp0 .SPcheck-fpu-exception)
    549546  (get-double-float d0 src)
    550547  (fmrx imm0 fpscr)
     
    552549  (fmxr fpscr imm0)
    553550  (fsqrtd d1 d0)
    554   (blx temp0)
     551  (bla .SPcheck-fpu-exception)
    555552  (put-double-float d1 dest)
    556553  (return-lisp-frame))
  • branches/arm/level-0/ARM/arm-hash.lisp

    r14104 r14111  
    3030(defarmlapfunction fast-mod ((number arg_y) (divisor arg_z))
    3131  (build-lisp-frame imm0)
    32   (load-subprim temp0 .SPudiv32)
    3332  (mov imm0 (:lsr number (:$ arm::fixnumshift)))
    3433  (mov imm1 (:lsr divisor (:$ arm::fixnumshift)))
    35   (blx temp0)
     34  (bla .SPudiv32)
    3635  (box-fixnum arg_z imm1)
    3736  (return-lisp-frame imm0))
     
    106105;;; ensure that the vector header gets memoized as well
    107106(defarmlapfunction %set-hash-table-vector-key ((vector arg_x) (index arg_y) (value arg_z))
    108   (load-subprim imm0 .SPset-hash-key)
    109   (bx imm0))
     107  (ba .SPset-hash-key))
    110108
    111109(defarmlapfunction %set-hash-table-vector-key-conditional ((offset 0) (vector arg_x) (old arg_y) (new arg_z))
    112   (load-subprim imm0 .SPset-hash-key-conditional)
    113   (bx imm0))
     110  (ba .SPset-hash-key-conditional))
    114111
    115112;;; Strip the tag bits to turn x into a fixnum
  • branches/arm/level-0/ARM/arm-misc.lisp

    r14104 r14111  
    200200
    201201(defarmlapfunction %heap-bytes-allocated ()
    202   (load-subprim temp0 .SPmakeu64)
    203202  (ldr imm2 (:@ rcontext (:$ arm::tcr.last-allocptr)))
    204203  (ldr imm1 (:@ rcontext (:$ arm::tcr.total-bytes-allocated-high)))
     
    212211  (adc imm1 imm1 (:$ 0))
    213212  @go
    214   (bx temp0))
     213  (ba .SPmakeu64))
    215214
    216215
     
    219218(defarmlapfunction values ()
    220219  (:arglist (&rest values))
    221   (load-subprim imm0 .SPvalues)
    222220  (vpush-argregs)
    223221  (add temp0 nargs vsp)
    224   (bx imm0))
     222  (ba .SPvalues))
    225223
    226224;; It would be nice if (%setf-macptr macptr (ash (the fixnum value)
     
    241239
    242240(defarmlapfunction %%get-unsigned-longlong ((ptr arg_y) (offset arg_z))
    243   (load-subprim temp0 .SPmakeu64)
    244241  (trap-unless-xtype= ptr arm::subtag-macptr)
    245242  (macptr-ptr imm1 ptr)
     
    248245  (ldr imm0 (:@ imm2 (:$ 0)))
    249246  (ldr imm1 (:@ imm2 (:$ 4)))
    250   (bx temp0))
     247  (ba .SPmakeu64))
    251248
    252249
    253250
    254251(defarmlapfunction %%get-signed-longlong ((ptr arg_y) (offset arg_z))
    255   (load-subprim temp0 .SPmakes64)
    256252  (trap-unless-xtype= ptr arm::subtag-macptr)
    257253  (macptr-ptr imm1 ptr)
     
    260256  (ldr imm0 (:@ imm2 (:$ 0)))           ;low
    261257  (ldr imm1 (:@ imm2 (:$ 1)))           ;high
    262   (bx temp0))
     258  (ba .SPmakes64))
    263259
    264260
     
    267263                                            (offset arg_y)
    268264                                            (val arg_z))
    269   (load-subprim temp0 .SPgetu64)
    270265  (build-lisp-frame imm0)
    271266  (mov fn nfn)
    272267  (trap-unless-xtype= ptr arm::subtag-macptr)
    273   (blx temp0)
     268  (bla .SPgetu64)
    274269  (macptr-ptr imm2 ptr)
    275270  (add imm2 imm2 (:asr offset (:$ arm::fixnumshift)))
     
    283278                                          (offset arg_y)
    284279                                          (val arg_z))
    285   (load-subprim temp0 .SPgets64)
    286280  (build-lisp-frame imm0)
    287281  (mov fn nfn)
    288282  (trap-unless-xtype= ptr arm::subtag-macptr)
    289   (blx temp0)
     283  (bla .SPgets64)
    290284  (macptr-ptr imm2 ptr)
    291285  (add imm2 imm2 (:asr offset (:$ arm::fixnumshift)))
     
    345339;;; This needs to be done out-of-line, to handle EGC memoization.
    346340(defarmlapfunction %store-node-conditional ((offset 0) (object arg_x) (old arg_y) (new arg_z))
    347   (load-subprim temp0 .SPstore-node-conditional)
    348   (bx temp0))
     341  (ba .SPstore-node-conditional))
    349342
    350343#+notyet                                ; needs a subprim on ARM
     
    420413
    421414(defarmlapfunction %atomic-incf-node ((by arg_x) (node arg_y) (disp arg_z))
    422   (load-subprim imm0 .SPatomic-incf-node)
    423   (bx imm0))
     415  (ba .SPatomic-incf-node))
    424416
    425417(defarmlapfunction %atomic-incf-ptr ((ptr arg_z))
  • branches/arm/level-0/ARM/arm-numbers.lisp

    r14108 r14111  
    6262  (digit-h temp0 imm0)
    6363  (digit-l temp1 imm0)
    64   (load-subprim imm0 .SPvalues)
    6564  (vpush1 temp0)
    6665  (vpush1 temp1)
    6766  (add temp0 vsp '2)
    6867  (set-nargs 2)
    69   (bx imm0))
     68  (ba .SPvalues))
    7069
    7170
     
    140139        (remainder arg_z))
    141140    (build-lisp-frame)
    142     (load-subprim temp0 .SPsdiv32)
    143     (load-subprim temp1 .SPnvalret)
    144141    (mov fn nfn)
    145142    (cmp divisor '-1)   
     
    147144    (unbox-fixnum unboxed-divisor divisor)
    148145    (beq @neg)
    149     (blx temp0)
     146    (bla .SPsdiv32)
    150147    (box-fixnum quotient unboxed-quotient)
    151148    (box-fixnum remainder unboxed-remainder)
    152149    (stmdb (:! vsp) (quotient remainder))
    153150    (set-nargs 2)
    154     (bx temp1)
     151    (ba .SPnvalret)
    155152    @neg
    156153    (ldr arg_z (:@ fn '*least-positive-bignum*))
     
    162159    (vpush1 temp0)
    163160    (set-nargs 2)
    164     (bx temp1)))
     161    (ba .SPnvalret)))
    165162
    166163
  • branches/arm/level-0/ARM/arm-symbol.lisp

    r14104 r14111  
    6868
    6969(defarmlapfunction %symptr-value ((symptr arg_z))
    70   (load-subprim imm0 .SPspecref)
    71   (bx imm0))
     70  (ba .SPspecref))
    7271
    7372(defarmlapfunction %set-symptr-value ((symptr arg_y) (val arg_z))
    74   (load-subprim imm0 .SPspecset)
    75   (bx imm0))
     73  (ba .SPspecset))
    7674
    7775(defarmlapfunction %symptr-binding-address ((symptr arg_z))
     
    8482  (cmp temp0 (:$ arm::subtag-no-thread-local-binding))
    8583  (unbox-fixnum imm0 imm0)
    86   (load-subprim temp1 .SPvalues)
    8784  (beq @sym)
    8885  (vpush1 imm1)
     
    9087  (set-nargs 2)
    9188  (add temp0 vsp '2)
    92   (bx temp1)
     89  (ba .SPvalues)
    9390  @sym
    9491  (mov arg_y '#.arm::symbol.vcell)
     
    9794  (set-nargs 2)
    9895  (add temp0 vsp '2)
    99   (bx temp1))
     96  (ba .SPvalues))
    10097
    10198(defarmlapfunction %tcr-binding-location ((tcr arg_y) (sym arg_z))
  • branches/arm/level-0/ARM/arm-utils.lisp

    r14104 r14111  
    2222  ;; %address-of anything else is the address of that thing as an integer.
    2323  (test-fixnum arg)
    24   (load-subprim imm1 .SPmakeu32)
    2524  (mov imm0 arg_z)
    2625  (bxeq lr)
     
    2827  (box-fixnum arg_z imm0)               ; assume it did
    2928  (bxeq lr)                             ; else arg_z tagged ok, but missing bits
    30   (bx imm1)         ; put all bits in bignum.
     29  (ba .SPmakeu32)         ; put all bits in bignum.
    3130)
    3231
     
    112111    (set-nargs 1)
    113112    (stmdb (:! vsp) (fun obj limit))
    114     (load-subprim imm1 .SPfuncall)
    115113    (mov nfn fun)
    116     (blx imm1)
     114    (bla .SPfuncall)
    117115    (ldmia (:! vsp) (fun obj limit))
    118116    (add obj obj (:$ arm::cons.size))
     
    121119    (add arg_z obj (:$ arm::fulltag-misc))
    122120    (stmdb (:! vsp) (fun obj limit))
    123     (load-subprim imm1 .SPfuncall)
    124121    (set-nargs 1)
    125122    (mov nfn fun)
    126     (blx imm1)
     123    (bla .SPfuncall)
    127124    (ldmia (:! vsp) (fun obj limit))
    128125    (ldr header (:@ obj (:$ 0)))
     
    209206    (bhs @done)
    210207    (set-nargs 1)
    211     (load-subprim imm1 .SPfuncall)
    212208    (stmdb (:! vsp) (arg_z fun sentinel))
    213209    (mov nfn fun)
    214     (blx imm1)
     210    (bla .SPfuncall)
    215211    (ldmia (:! vsp) (obj fun sentinel))
    216212    (add obj obj (:$ (- arm::cons.size arm::fulltag-cons)))
     
    219215    (add arg_z obj (:$ arm::fulltag-misc))
    220216    (stmdb (:! vsp) (arg_z fun sentinel))
    221     (load-subprim imm1 .SPfuncall)
    222217    (set-nargs 1)
    223218    (mov nfn fun)
    224     (blx imm1)
     219    (bla .SPfuncall)
    225220    (ldmia (:! vsp) (obj fun sentinel))
    226221    (sub obj obj (:$ arm::fulltag-misc))
     
    332327  (mov fn nfn)
    333328  (uuo-kernel-service (:? al) (:$ arch::error-allocate-list))
    334   (load-subprim imm0 .SPnvalret)
    335329  (vpush1 arg_z)
    336330  (vpush1 arg_y)
    337331  (set-nargs 2)
    338   (bx imm0))
     332  (ba .SPnvalret))
    339333
    340334
     
    380374  (mov imm0 (:$ arch::gc-trap-function-get-lisp-heap-threshold))
    381375  (uuo-gc-trap (:? al))
    382   (load-subprim imm1 .SPmakeu32)
    383   (bx imm1))
     376  (ba .SPmakeu32))
    384377
    385378(defarmlapfunction set-lisp-heap-gc-threshold ((new arg_z))
     
    390383  (check-nargs 1)
    391384  (build-lisp-frame)
    392   (load-subprim imm0 .SPgetu32)
    393   (blx imm0)
     385  (bla .SPgetu32)
    394386  (mov imm1 imm0)
    395387  (mov imm0 (:$ arch::gc-trap-function-set-lisp-heap-threshold))
    396   (load-subprim temp0 .SPmakeu32)
    397388  (uuo-gc-trap (:? al))
    398389  (restore-lisp-frame imm1)
    399   (bx temp0))
     390  (ba .SPmakeu32))
    400391
    401392
     
    412403  "Do a full GC, then consider all heap-allocated objects which survive to be non-relocatable."
    413404  (check-nargs 0)
    414   (load-subprim temp0 .SPmakeu32)
    415405  (mov imm0 (:$ arch::gc-trap-function-freeze))
    416406  (uuo-gc-trap (:? al))
    417   (bx temp0))
     407  (ba .SPmakeu32))
    418408
    419409(defarmlapfunction flash-freeze ()
    420410  "Like FREEZE, but don't GC first."
    421411  (check-nargs 0)
    422   (load-subprim temp0 .SPmakeu32)
    423412  (mov imm0 (:$ arch::gc-trap-function-flash-freeze))
    424413  (uuo-gc-trap (:? al))
    425   (bx temp0))
     414  (ba .SPmakeu32))
    426415
    427416(defun %watch (uvector)
Note: See TracChangeset for help on using the changeset viewer.