1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 19:50:24 +02:00

subr-call implementation simplification

* libguile/vm-engine.c (subr-call): Reference args from SP, not FP.
This commit is contained in:
Andy Wingo 2015-10-22 11:35:07 +00:00
parent 467e587d68
commit 9144f50c31

View file

@ -801,53 +801,52 @@ VM_NAME (scm_i_thread *thread, struct scm_vm *vp,
SYNC_IP (); SYNC_IP ();
// FIXME!!!!
switch (FRAME_LOCALS_COUNT_FROM (1)) switch (FRAME_LOCALS_COUNT_FROM (1))
{ {
case 0: case 0:
ret = subr (); ret = subr ();
break; break;
case 1: case 1:
ret = subr (FP_REF (1)); ret = subr (SP_REF (0));
break; break;
case 2: case 2:
ret = subr (FP_REF (1), FP_REF (2)); ret = subr (SP_REF (1), SP_REF (0));
break; break;
case 3: case 3:
ret = subr (FP_REF (1), FP_REF (2), FP_REF (3)); ret = subr (SP_REF (2), SP_REF (1), SP_REF (0));
break; break;
case 4: case 4:
ret = subr (FP_REF (1), FP_REF (2), FP_REF (3), ret = subr (SP_REF (3), SP_REF (2), SP_REF (1),
FP_REF (4)); SP_REF (0));
break; break;
case 5: case 5:
ret = subr (FP_REF (1), FP_REF (2), FP_REF (3), ret = subr (SP_REF (4), SP_REF (3), SP_REF (2),
FP_REF (4), FP_REF (5)); SP_REF (1), SP_REF (0));
break; break;
case 6: case 6:
ret = subr (FP_REF (1), FP_REF (2), FP_REF (3), ret = subr (SP_REF (5), SP_REF (4), SP_REF (3),
FP_REF (4), FP_REF (5), FP_REF (6)); SP_REF (2), SP_REF (1), SP_REF (0));
break; break;
case 7: case 7:
ret = subr (FP_REF (1), FP_REF (2), FP_REF (3), ret = subr (SP_REF (6), SP_REF (5), SP_REF (4),
FP_REF (4), FP_REF (5), FP_REF (6), SP_REF (3), SP_REF (2), SP_REF (1),
FP_REF (7)); SP_REF (0));
break; break;
case 8: case 8:
ret = subr (FP_REF (1), FP_REF (2), FP_REF (3), ret = subr (SP_REF (7), SP_REF (6), SP_REF (5),
FP_REF (4), FP_REF (5), FP_REF (6), SP_REF (4), SP_REF (3), SP_REF (2),
FP_REF (7), FP_REF (8)); SP_REF (1), SP_REF (0));
break; break;
case 9: case 9:
ret = subr (FP_REF (1), FP_REF (2), FP_REF (3), ret = subr (SP_REF (8), SP_REF (7), SP_REF (6),
FP_REF (4), FP_REF (5), FP_REF (6), SP_REF (5), SP_REF (4), SP_REF (3),
FP_REF (7), FP_REF (8), FP_REF (9)); SP_REF (2), SP_REF (1), SP_REF (0));
break; break;
case 10: case 10:
ret = subr (FP_REF (1), FP_REF (2), FP_REF (3), ret = subr (SP_REF (9), SP_REF (8), SP_REF (7),
FP_REF (4), FP_REF (5), FP_REF (6), SP_REF (6), SP_REF (5), SP_REF (4),
FP_REF (7), FP_REF (8), FP_REF (9), SP_REF (3), SP_REF (2), SP_REF (1),
FP_REF (10)); SP_REF (0));
break; break;
default: default:
abort (); abort ();