Fix some stuff in cpu/ppc, fix bootstrap bug
parent
3e1afe89a3
commit
e7cd1e2ce2
|
|
@ -57,6 +57,10 @@ cell 8 = [
|
||||||
|
|
||||||
[ "ALIEN: 1234" ] [ 1234 <alien> unparse ] unit-test
|
[ "ALIEN: 1234" ] [ 1234 <alien> unparse ] unit-test
|
||||||
|
|
||||||
|
[ ] [ 0 B{ 1 2 3 } <displaced-alien> drop ] unit-test
|
||||||
|
[ ] [ 0 F{ 1 2 3 } <displaced-alien> drop ] unit-test
|
||||||
|
[ ] [ 0 ?{ t f t } <displaced-alien> drop ] unit-test
|
||||||
|
|
||||||
[ 0 B{ 1 2 3 } <displaced-alien> alien-address ] unit-test-fails
|
[ 0 B{ 1 2 3 } <displaced-alien> alien-address ] unit-test-fails
|
||||||
|
|
||||||
[ 1 1 <displaced-alien> ] unit-test-fails
|
[ 1 1 <displaced-alien> ] unit-test-fails
|
||||||
|
|
|
||||||
|
|
@ -79,8 +79,7 @@ M: ppc-backend %box-float ( dst src -- )
|
||||||
] with-scope ;
|
] with-scope ;
|
||||||
|
|
||||||
M: ppc-backend %box-alien ( dst src -- )
|
M: ppc-backend %box-alien ( dst src -- )
|
||||||
"f" define-label
|
{ "end" "f" } [ define-label ] each
|
||||||
"end" define-label
|
|
||||||
0 over v>operand 0 CMPI
|
0 over v>operand 0 CMPI
|
||||||
"f" get BEQ
|
"f" get BEQ
|
||||||
alien 4 cells %allot
|
alien 4 cells %allot
|
||||||
|
|
|
||||||
|
|
@ -690,8 +690,8 @@ define-alien-integer-intrinsics
|
||||||
{ unboxed-c-ptr "alien" simple-c-ptr }
|
{ unboxed-c-ptr "alien" simple-c-ptr }
|
||||||
{ f "offset" fixnum }
|
{ f "offset" fixnum }
|
||||||
} }
|
} }
|
||||||
{ +scratch+ { { float "output" } } }
|
{ +scratch+ { { float "value" } } }
|
||||||
{ +output+ { "output" } }
|
{ +output+ { "value" } }
|
||||||
{ +clobber+ { "offset" } }
|
{ +clobber+ { "offset" } }
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,7 @@ M: cached live-loc? cached-loc live-loc? ;
|
||||||
M: cached (lazy-load) >r cached-vreg r> (lazy-load) ;
|
M: cached (lazy-load) >r cached-vreg r> (lazy-load) ;
|
||||||
M: cached lazy-store
|
M: cached lazy-store
|
||||||
2dup cached-loc =
|
2dup cached-loc =
|
||||||
[ 2drop f ] [ "live-locs" get at %move ] if ;
|
[ 2drop ] [ "live-locs" get at %move ] if ;
|
||||||
M: cached minimal-ds-loc* cached-loc minimal-ds-loc* ;
|
M: cached minimal-ds-loc* cached-loc minimal-ds-loc* ;
|
||||||
|
|
||||||
INSTANCE: cached value
|
INSTANCE: cached value
|
||||||
|
|
|
||||||
17
vm/alien.c
17
vm/alien.c
|
|
@ -78,13 +78,26 @@ void box_alien(void *ptr)
|
||||||
DEFINE_PRIMITIVE(displaced_alien)
|
DEFINE_PRIMITIVE(displaced_alien)
|
||||||
{
|
{
|
||||||
CELL alien = dpop();
|
CELL alien = dpop();
|
||||||
if(type_of(alien) != F_TYPE && type_of(alien) != ALIEN_TYPE)
|
|
||||||
type_error(ALIEN_TYPE,alien);
|
|
||||||
CELL displacement = to_cell(dpop());
|
CELL displacement = to_cell(dpop());
|
||||||
|
|
||||||
if(alien == F && displacement == 0)
|
if(alien == F && displacement == 0)
|
||||||
dpush(F);
|
dpush(F);
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
switch(type_of(alien))
|
||||||
|
{
|
||||||
|
case BYTE_ARRAY_TYPE:
|
||||||
|
case BIT_ARRAY_TYPE:
|
||||||
|
case FLOAT_ARRAY_TYPE:
|
||||||
|
case ALIEN_TYPE:
|
||||||
|
case F_TYPE:
|
||||||
dpush(allot_alien(alien,displacement));
|
dpush(allot_alien(alien,displacement));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
type_error(ALIEN_TYPE,alien);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* address of an object representing a C pointer. Explicitly throw an error
|
/* address of an object representing a C pointer. Explicitly throw an error
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue