PPC: Keep MULTRES in a register.

This commit is contained in:
Mike Pall 2010-09-14 00:46:06 +02:00
parent a36287b218
commit fe159ea2fb

View File

@ -28,18 +28,19 @@
|.define PC, r16 // Next PC. |.define PC, r16 // Next PC.
|.define DISPATCH, r17 // Opcode dispatch table. |.define DISPATCH, r17 // Opcode dispatch table.
|.define LREG, r18 // Register holding lua_State (also in SAVE_L). |.define LREG, r18 // Register holding lua_State (also in SAVE_L).
|.define MULTRES, r19 // Size of multi-result: (nresults+1)*8.
| |
|// Constants for vectorized type-comparisons (hi+low GPR). C callee-save. |// Constants for vectorized type-comparisons (hi+low GPR). C callee-save.
|.define TISNUM, r21 |.define TISNUM, r22
|.if SPE |.if SPE
|.define TISSTR, r22 |.define TISSTR, r23
|.define TISTAB, r23 |.define TISTAB, r24
|.define TISFUNC, r24 |.define TISFUNC, r25
|.define TISNIL, r25 |.define TISNIL, r26
|.endif |.endif
| |
|// The following temporaries are not saved across C calls, except for RA. |// The following temporaries are not saved across C calls, except for RA.
|.define RA, r19 // Callee-save. |.define RA, r20 // Callee-save.
|.define RB, r10 |.define RB, r10
|.define RC, r11 |.define RC, r11
|.define RD, r12 |.define RD, r12
@ -51,7 +52,7 @@
|.define TMP3, r6 // Overlaps CARG4. |.define TMP3, r6 // Overlaps CARG4.
| |
|// Saved temporaries. |// Saved temporaries.
|.define SAVE0, r20 |.define SAVE0, r21
| |
|// Calling conventions. |// Calling conventions.
|.define CARG1, r3 |.define CARG1, r3
@ -284,7 +285,7 @@ static void build_subroutines(BuildCtx *ctx)
|->vm_returnc: |->vm_returnc:
| andi. TMP0, PC, FRAME_TYPE | andi. TMP0, PC, FRAME_TYPE
| addi RD, RD, 8 // RD = (nresults+1)*8. | addi RD, RD, 8 // RD = (nresults+1)*8.
| stw RD, SAVE_MULTRES | mr MULTRES, RD
| beq ->BC_RET_Z // Handle regular return to Lua. | beq ->BC_RET_Z // Handle regular return to Lua.
| |
|->vm_return: |->vm_return:
@ -2010,8 +2011,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
case BC_CALLM: case BC_CALLM:
| // RA = base*8, (RB = (nresults+1)*8,) RC = extra_nargs*8 | // RA = base*8, (RB = (nresults+1)*8,) RC = extra_nargs*8
| lwz TMP0, SAVE_MULTRES | add NARGS8:RC, NARGS8:RC, MULTRES
| add NARGS8:RC, NARGS8:RC, TMP0
| // Fall through. Assumes BC_CALL follows. | // Fall through. Assumes BC_CALL follows.
break; break;
case BC_CALL: case BC_CALL:
@ -2028,8 +2028,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
case BC_CALLMT: case BC_CALLMT:
| // RA = base*8, (RB = 0,) RC = extra_nargs*8 | // RA = base*8, (RB = 0,) RC = extra_nargs*8
| lwz TMP0, SAVE_MULTRES | add NARGS8:RC, NARGS8:RC, MULTRES
| add NARGS8:RC, NARGS8:RC, TMP0
| // Fall through. Assumes BC_CALLT follows. | // Fall through. Assumes BC_CALLT follows.
break; break;
case BC_CALLT: case BC_CALLT:
@ -2109,8 +2108,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
case BC_RETM: case BC_RETM:
| // RA = results*8, RD = extra_nresults*8 | // RA = results*8, RD = extra_nresults*8
| lwz TMP0, SAVE_MULTRES | add RD, RD, MULTRES // MULTRES >= 8, so RD >= 8.
| add RD, RD, TMP0 // SAVE_MULTRES >= 8, so RD >= 8.
| // Fall through. Assumes BC_RET follows. | // Fall through. Assumes BC_RET follows.
break; break;
@ -2118,7 +2116,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
| // RA = results*8, RD = (nresults+1)*8 | // RA = results*8, RD = (nresults+1)*8
| lwz PC, FRAME_PC(BASE) | lwz PC, FRAME_PC(BASE)
| add RA, BASE, RA | add RA, BASE, RA
| stw RD, SAVE_MULTRES | mr MULTRES, RD
|1: |1:
| andi. TMP0, PC, FRAME_TYPE | andi. TMP0, PC, FRAME_TYPE
| xori TMP1, PC, FRAME_VARG | xori TMP1, PC, FRAME_VARG
@ -2173,7 +2171,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
| // RA = results*8, RD = (nresults+1)*8 | // RA = results*8, RD = (nresults+1)*8
| lwz PC, FRAME_PC(BASE) | lwz PC, FRAME_PC(BASE)
| add RA, BASE, RA | add RA, BASE, RA
| stw RD, SAVE_MULTRES | mr MULTRES, RD
| andi. TMP0, PC, FRAME_TYPE | andi. TMP0, PC, FRAME_TYPE
| xori TMP1, PC, FRAME_VARG | xori TMP1, PC, FRAME_VARG
| bne ->BC_RETV_Z | bne ->BC_RETV_Z