cpu.ppc: remove use of with-scope in favor of locals.
							parent
							
								
									255b60ef8d
								
							
						
					
					
						commit
						c44aaf58be
					
				| 
						 | 
					@ -527,25 +527,23 @@ M: ppc %unbox-alien ( dst src -- )
 | 
				
			||||||
! else // Assume (src & tag_mask) == BYTE_ARRAY_TYPE
 | 
					! else // Assume (src & tag_mask) == BYTE_ARRAY_TYPE
 | 
				
			||||||
!   dst = ((byte_array*)src) + 1;
 | 
					!   dst = ((byte_array*)src) + 1;
 | 
				
			||||||
M:: ppc %unbox-any-c-ptr ( dst src -- )
 | 
					M:: ppc %unbox-any-c-ptr ( dst src -- )
 | 
				
			||||||
    [
 | 
					    <label> :> end
 | 
				
			||||||
        "end" define-label
 | 
					    ! Is the object f?
 | 
				
			||||||
        ! Is the object f?
 | 
					    dst 0 LI
 | 
				
			||||||
        dst 0 LI
 | 
					    0 src \ f type-number %compare-cell-imm
 | 
				
			||||||
        0 src \ f type-number %compare-cell-imm
 | 
					    0 end BEQ
 | 
				
			||||||
        0 "end" get BEQ
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ! Is the object an alien?
 | 
					    ! Is the object an alien?
 | 
				
			||||||
        dst src tag-mask get ANDI.
 | 
					    dst src tag-mask get ANDI.
 | 
				
			||||||
        ! Assume unboxing a byte-array.
 | 
					    ! Assume unboxing a byte-array.
 | 
				
			||||||
        0 dst alien type-number %compare-cell-imm
 | 
					    0 dst alien type-number %compare-cell-imm
 | 
				
			||||||
        dst src byte-array-offset ADDI
 | 
					    dst src byte-array-offset ADDI
 | 
				
			||||||
        0 "end" get BNE
 | 
					    0 end BNE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ! Unbox the alien.
 | 
					    ! Unbox the alien.
 | 
				
			||||||
        scratch-reg alien-offset LI
 | 
					    scratch-reg alien-offset LI
 | 
				
			||||||
        dst src scratch-reg %load-cell-x
 | 
					    dst src scratch-reg %load-cell-x
 | 
				
			||||||
        "end" resolve-label
 | 
					    end resolve-label ;
 | 
				
			||||||
    ] with-scope ;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
! Be very careful with this. It cannot be used as an immediate
 | 
					! Be very careful with this. It cannot be used as an immediate
 | 
				
			||||||
! offset to a load or store.
 | 
					! offset to a load or store.
 | 
				
			||||||
| 
						 | 
					@ -562,25 +560,23 @@ M:: ppc %unbox-any-c-ptr ( dst src -- )
 | 
				
			||||||
!   dst->address = src;
 | 
					!   dst->address = src;
 | 
				
			||||||
! }
 | 
					! }
 | 
				
			||||||
M:: ppc %box-alien ( dst src temp -- )
 | 
					M:: ppc %box-alien ( dst src temp -- )
 | 
				
			||||||
    [
 | 
					    <label> :> f-label
 | 
				
			||||||
        "f" define-label
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ! Is the object f?
 | 
					    ! Is the object f?
 | 
				
			||||||
        dst \ f type-number LI
 | 
					    dst \ f type-number LI
 | 
				
			||||||
        0 src 0 %compare-cell-imm
 | 
					    0 src 0 %compare-cell-imm
 | 
				
			||||||
        0 "f" get BEQ
 | 
					    0 f-label BEQ
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ! Allocate and initialize an alien object.
 | 
					    ! Allocate and initialize an alien object.
 | 
				
			||||||
        dst 5 cells alien temp %allot
 | 
					    dst 5 cells alien temp %allot
 | 
				
			||||||
        temp \ f type-number LI
 | 
					    temp \ f type-number LI
 | 
				
			||||||
        scratch-reg dst %clear-tag-bits
 | 
					    scratch-reg dst %clear-tag-bits
 | 
				
			||||||
        temp scratch-reg 1 cells %store-cell
 | 
					    temp scratch-reg 1 cells %store-cell
 | 
				
			||||||
        temp scratch-reg 2 cells %store-cell
 | 
					    temp scratch-reg 2 cells %store-cell
 | 
				
			||||||
        src scratch-reg 3 cells %store-cell
 | 
					    src scratch-reg 3 cells %store-cell
 | 
				
			||||||
        src scratch-reg 4 cells %store-cell
 | 
					    src scratch-reg 4 cells %store-cell
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        "f" resolve-label
 | 
					    f-label resolve-label ;
 | 
				
			||||||
    ] with-scope ;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
! dst->base = base;
 | 
					! dst->base = base;
 | 
				
			||||||
! dst->displacement = displacement;
 | 
					! dst->displacement = displacement;
 | 
				
			||||||
| 
						 | 
					@ -629,26 +625,26 @@ M:: ppc %box-alien ( dst src temp -- )
 | 
				
			||||||
!   box_displaced_alien_alien(dst, displacement, base, temp);
 | 
					!   box_displaced_alien_alien(dst, displacement, base, temp);
 | 
				
			||||||
! else
 | 
					! else
 | 
				
			||||||
!   box_displaced_alien_byte_array(dst, displacement, base, temp);
 | 
					!   box_displaced_alien_byte_array(dst, displacement, base, temp);
 | 
				
			||||||
:: box-displaced-alien/dynamic ( dst displacement base temp -- )
 | 
					:: box-displaced-alien/dynamic ( dst displacement base temp end -- )
 | 
				
			||||||
    "not-f" define-label
 | 
					    <label> :> not-f
 | 
				
			||||||
    "not-alien" define-label
 | 
					    <label> :> not-alien
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ! Is base f?
 | 
					    ! Is base f?
 | 
				
			||||||
    0 base \ f type-number %compare-cell-imm
 | 
					    0 base \ f type-number %compare-cell-imm
 | 
				
			||||||
    0 "not-f" get BNE
 | 
					    0 not-f BNE
 | 
				
			||||||
    dst displacement base box-displaced-alien/f
 | 
					    dst displacement base box-displaced-alien/f
 | 
				
			||||||
    "end" get B
 | 
					    end B
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ! Is base an alien?
 | 
					    ! Is base an alien?
 | 
				
			||||||
    "not-f" resolve-label
 | 
					    not-f resolve-label
 | 
				
			||||||
    temp base tag-mask get ANDI.
 | 
					    temp base tag-mask get ANDI.
 | 
				
			||||||
    0 temp alien type-number %compare-cell-imm
 | 
					    0 temp alien type-number %compare-cell-imm
 | 
				
			||||||
    0 "not-alien" get BNE
 | 
					    0 not-alien BNE
 | 
				
			||||||
    dst displacement base temp box-displaced-alien/alien
 | 
					    dst displacement base temp box-displaced-alien/alien
 | 
				
			||||||
    "end" get B
 | 
					    end B
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ! Assume base is a byte array.
 | 
					    ! Assume base is a byte array.
 | 
				
			||||||
    "not-alien" resolve-label
 | 
					    not-alien resolve-label
 | 
				
			||||||
    dst displacement base temp box-displaced-alien/byte-array ;
 | 
					    dst displacement base temp box-displaced-alien/byte-array ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
! if (displacement == 0)
 | 
					! if (displacement == 0)
 | 
				
			||||||
| 
						 | 
					@ -666,33 +662,31 @@ M:: ppc %box-alien ( dst src temp -- )
 | 
				
			||||||
!      box_displaced_alien_dynamic(dst, displacement, base, temp);
 | 
					!      box_displaced_alien_dynamic(dst, displacement, base, temp);
 | 
				
			||||||
! }
 | 
					! }
 | 
				
			||||||
M:: ppc %box-displaced-alien ( dst displacement base temp base-class -- )
 | 
					M:: ppc %box-displaced-alien ( dst displacement base temp base-class -- )
 | 
				
			||||||
    [
 | 
					    <label> :> end
 | 
				
			||||||
        "end" define-label
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ! If displacement is zero, return the base.
 | 
					    ! If displacement is zero, return the base.
 | 
				
			||||||
        dst base MR
 | 
					    dst base MR
 | 
				
			||||||
        0 displacement 0 %compare-cell-imm
 | 
					    0 displacement 0 %compare-cell-imm
 | 
				
			||||||
        0 "end" get BEQ
 | 
					    0 end BEQ
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ! Displacement is non-zero, we're going to be allocating a new
 | 
					    ! Displacement is non-zero, we're going to be allocating a new
 | 
				
			||||||
        ! object
 | 
					    ! object
 | 
				
			||||||
        dst 5 cells alien temp %allot
 | 
					    dst 5 cells alien temp %allot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ! Set expired to f
 | 
					    ! Set expired to f
 | 
				
			||||||
        temp \ f type-number %load-immediate
 | 
					    temp \ f type-number %load-immediate
 | 
				
			||||||
        scratch-reg 2 alien@ LI
 | 
					    scratch-reg 2 alien@ LI
 | 
				
			||||||
        temp dst scratch-reg %store-cell-x
 | 
					    temp dst scratch-reg %store-cell-x
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        dst displacement base temp
 | 
					    dst displacement base temp
 | 
				
			||||||
        {
 | 
					    {
 | 
				
			||||||
            { [ base-class \ f class<= ] [ drop box-displaced-alien/f ] }
 | 
					        { [ base-class \ f class<= ] [ drop box-displaced-alien/f ] }
 | 
				
			||||||
            { [ base-class \ alien class<= ] [ box-displaced-alien/alien ] }
 | 
					        { [ base-class \ alien class<= ] [ box-displaced-alien/alien ] }
 | 
				
			||||||
            { [ base-class \ byte-array class<= ] [ box-displaced-alien/byte-array ] }
 | 
					        { [ base-class \ byte-array class<= ] [ box-displaced-alien/byte-array ] }
 | 
				
			||||||
            [ box-displaced-alien/dynamic ]
 | 
					        [ end box-displaced-alien/dynamic ]
 | 
				
			||||||
        } cond
 | 
					    } cond
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        "end" resolve-label
 | 
					    end resolve-label ;
 | 
				
			||||||
    ] with-scope ;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
M:: ppc.32 %convert-integer ( dst src c-type -- )
 | 
					M:: ppc.32 %convert-integer ( dst src c-type -- )
 | 
				
			||||||
    c-type {
 | 
					    c-type {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue