diff options
Diffstat (limited to 'src/vm_arm.dasc')
-rw-r--r-- | src/vm_arm.dasc | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/src/vm_arm.dasc b/src/vm_arm.dasc index 0bd9b147..af722f9e 100644 --- a/src/vm_arm.dasc +++ b/src/vm_arm.dasc | |||
@@ -2086,7 +2086,7 @@ static void build_subroutines(BuildCtx *ctx) | |||
2086 | | // RA = resultptr, CARG4 = meta base | 2086 | | // RA = resultptr, CARG4 = meta base |
2087 | | ldr RB, SAVE_MULTRES | 2087 | | ldr RB, SAVE_MULTRES |
2088 | | ldr INS, [PC, #-4] | 2088 | | ldr INS, [PC, #-4] |
2089 | | ldr CARG3, [CARG4, #-24] // Save previous trace number. | 2089 | | ldr TRACE:CARG3, [CARG4, #-24] // Save previous trace. |
2090 | | subs RB, RB, #8 | 2090 | | subs RB, RB, #8 |
2091 | | decode_RA8 RC, INS // Call base. | 2091 | | decode_RA8 RC, INS // Call base. |
2092 | | beq >2 | 2092 | | beq >2 |
@@ -2101,23 +2101,20 @@ static void build_subroutines(BuildCtx *ctx) | |||
2101 | | decode_RA8 RA, INS | 2101 | | decode_RA8 RA, INS |
2102 | | decode_RB8 RB, INS | 2102 | | decode_RB8 RB, INS |
2103 | | add RA, RA, RB | 2103 | | add RA, RA, RB |
2104 | | ldr CARG1, [DISPATCH, #DISPATCH_J(trace)] | ||
2105 | |3: | 2104 | |3: |
2106 | | cmp RA, RC | 2105 | | cmp RA, RC |
2107 | | mvn CARG2, #~LJ_TNIL | 2106 | | mvn CARG2, #~LJ_TNIL |
2108 | | bhi >9 // More results wanted? | 2107 | | bhi >9 // More results wanted? |
2109 | | | 2108 | | |
2110 | | ldr TRACE:RA, [CARG1, CARG3, lsl #2] | 2109 | | ldrh RA, TRACE:CARG3->traceno |
2111 | | cmp TRACE:RA, #0 | 2110 | | ldrh RC, TRACE:CARG3->link |
2112 | | beq ->cont_nop | 2111 | | cmp RC, RA |
2113 | | ldrh RC, TRACE:RA->link | ||
2114 | | cmp RC, CARG3 | ||
2115 | | beq ->cont_nop // Blacklisted. | 2112 | | beq ->cont_nop // Blacklisted. |
2116 | | cmp RC, #0 | 2113 | | cmp RC, #0 |
2117 | | bne =>BC_JLOOP // Jump to stitched trace. | 2114 | | bne =>BC_JLOOP // Jump to stitched trace. |
2118 | | | 2115 | | |
2119 | | // Stitch a new trace to the previous trace. | 2116 | | // Stitch a new trace to the previous trace. |
2120 | | str CARG3, [DISPATCH, #DISPATCH_J(exitno)] | 2117 | | str RA, [DISPATCH, #DISPATCH_J(exitno)] |
2121 | | str L, [DISPATCH, #DISPATCH_J(L)] | 2118 | | str L, [DISPATCH, #DISPATCH_J(L)] |
2122 | | str BASE, L->base | 2119 | | str BASE, L->base |
2123 | | sub CARG1, DISPATCH, #-GG_DISP2J | 2120 | | sub CARG1, DISPATCH, #-GG_DISP2J |