2021/07/04

18:30

So working on this stack shuffling method and looking at the original and the new one, this is what it looks like:

DB: ********************    NEW CODE (THIS OUTPUT IS WRONG)
DB: Preprocessing STACKSHUFFLE:[DUP2] (@62#DUP2~:[])
DB: Shuffle with: DUP2 -> [[A+] -> [A+A+]]
DB: *** Stack Result ***
DB: BEF: State:{L=[r8:Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMe
mory;:RN, r9:J, r10:top-long, r11:[B:RN, r12:I, r13:I:R, r14:I], S=[r11(15):[B
:N, r16:I, r8(17):Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory
;:N, r9(18):J, r10(19):top-long]}
DB: AFT: State:{L=[r8:Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMe
mory;:RN, r9:J, r10:top-long, r11:[B:RN, r12:I, r13:I:R, r14:I], S=[r11(15):[B
:N, r16:I, r8(17):Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory
;:N]}
DB: IN : [In:{r=r9, type=J, flags=}]
DB: OUT: []

DB: ********************    OLD CODE
DB: Preprocessing STACKSHUFFLE:[DUP2] (@62#DUP2~:[])
DB: Shuffle with: DUP2 -> [[A+] -> [A+A+]]
DB: Popped: [r9(18):J, r10(19):top-long]
DB: Source map: {0=r9(18):J}
DB: Pre-copies: {}
DB: *** Stack Result ***
DB: BEF: State:{L=[r8:Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMe
mory;:RN, r9:J, r10:top-long, r11:[B:RN, r12:I, r13:I:R, r14:I], S=[r11(15):[B
:N, r16:I, r8(17):Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory
;:N, r9(18):J, r10(19):top-long]}
DB: AFT: State:{L=[r8:Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMe
mory;:RN, r9:J, r10:top-long, r11:[B:RN, r12:I, r13:I:R, r14:I], S=[r11(15):[B
:N, r16:I, r8(17):Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory
;:N, r9(18):J, r10(19):top-long, r9(20):J, r10(21):top-long]}
DB: IN : []
DB: OUT: []
DB: ********************

So I wonder what the pushed Java types are...

Actually the correct new code result is this:

DB: ********************
DB: Preprocessing STACKSHUFFLE:[DUP2] (@62#DUP2~:[])
DB: Shuffle with: DUP2 -> [[A+] -> [A+A+]]
DB: >>>>>>>> PRE-DETERMINE
DB: *** Stack Result ***
DB: BEF: State:{L=[r8:Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;:RN, r9:J, r10:top-long, r11:[B:RN, r12:I, r13:I:R, r14:I], S=[r11(15):[B:N, r16:I, r8(17):Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;:N, r9(18):J, r10(19):top-long]}
DB: AFT: State:{L=[r8:Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;:RN, r9:J, r10:top-long, r11:[B:RN, r12:I, r13:I:R, r14:I], S=[r11(15):[B:N, r16:I, r8(17):Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;:N]}
DB: IN : [In:{r=r9, type=J, flags=}]
DB: OUT: []
DB: ********************
DB: @@PUSHTYPE: [[A+] -> [A+A+]] -> [J, J]
DB: *** Stack Result ***
DB: BEF: State:{L=[r8:Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;:RN, r9:J, r10:top-long, r11:[B:RN, r12:I, r13:I:R, r14:I], S=[r11(15):[B:N, r16:I, r8(17):Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;:N, r9(18):J, r10(19):top-long]}
DB: AFT: State:{L=[r8:Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;:RN, r9:J, r10:top-long, r11:[B:RN, r12:I, r13:I:R, r14:I], S=[r11(15):[B:N, r16:I, r17:J, r18:top-long, r19:J, r20:top-long]}
DB: IN : [In:{r=r8, type=Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;, flags=NC}, In:{r=r9, type=J, flags=}]
DB: OUT: [Out:{r=r17, type=J, flags=}, Out:{r=r19, type=J, flags=}]
DB: ********************
DB: <<<<<<<< POST-DETERMINE
DB: @@PUSHPOP: [[A+] -> [A+A+]] -> Result:{bef=State:{L=[r8:Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;:RN, r9:J, r10:top-long, r11:[B:RN, r12:I, r13:I:R, r14:I], S=[r11(15):[B:N, r16:I, r8(17):Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;:N, r9(18):J, r10(19):top-long]}, aft=State:{L=[r8:Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;:RN, r9:J, r10:top-long, r11:[B:RN, r12:I, r13:I:R, r14:I], S=[r11(15):[B:N, r16:I, r17:J, r18:top-long, r19:J, r20:top-long]}, enq=ENQ[|], in=[In:{r=r8, type=Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;, flags=NC}, In:{r=r9, type=J, flags=}], out=[Out:{r=r17, type=J, flags=}, Out:{r=r19, type=J, flags=}], ops=[]}
DB: @@INOUT: In:{r=r8, type=Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;, flags=NC} -> Out:{r=r17, type=J, flags=}
DB: @@INOUT: In:{r=r8, type=Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;, flags=NC} -> Out:{r=r19, type=J, flags=}
DB: *** Stack Result ***
DB: BEF: State:{L=[r8:Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;:RN, r9:J, r10:top-long, r11:[B:RN, r12:I, r13:I:R, r14:I], S=[r11(15):[B:N, r16:I, r8(17):Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;:N, r9(18):J, r10(19):top-long]}
DB: AFT: State:{L=[r8:Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;:RN, r9:J, r10:top-long, r11:[B:RN, r12:I, r13:I:R, r14:I], S=[r11(15):[B:N, r16:I, r17:J, r18:top-long, r19:J, r20:top-long]}
DB: IN : []
DB: OUT: []
DB: OPS: [COPY(R8, T0), COPY(T0, R17), COPY(T0, R19)]
DB: ********************

And I see it:

BEFORE:
S=[r11(15):[B:N, r16:I, r8(17):Lcc/squirreljme/jvm/summercoat/ld/mem/AbstractReadableMemory;:N, r9(18):J, r10(19):top-long]}
AFTER:
S=[r11(15):[B:N, r16:I, r17:J, r18:top-long, r19:J, r20:top-long]}

That AbstractReadableMemory is just going poof for some reason.

18:49

Ah, I am mixing the maxes... the pops is logical but one has logical and the other has not... so after doing this basically it works and compiles the code? Now to see if it actually produces the right result.

19:35

Okay so looks to be correct, although the optimizations that I did have been tossed out the window, but oh well...

- "*** Java :113 IADD@61 ***"
- "INTEGER_ADD_REG:[[14, 15, 14]]"
- "*** Java :113 DUP_X1@62 ***"
- "COPY:[[14, 20]]"
- "IF_ICMP_EQUALS:[[13, 0, 7]]"
- "MEM_HANDLE_COUNT_UP:[[13]]"
- "COPY:[[13, 21]]"
- "COPY:[[20, 13]]"
- "COPY:[[21, 14]]"
- "COPY:[[20, 15]]"
- "*** Java :113 PUTFIELD@63 ***"
- "COPY:[[14, 20]]"
- "IF_ICMP_EQUALS:[[14, 0, 542]]"
- "LOAD_POOL:[[#5271(ACCESSED_FIELD):NORMAL+INSTANCE+field java/util/LinkedLis
  t::modCount I, 21]]"
- "MEM_HANDLE_OFF_STORE_INTEGER_REG_JAVA:[[15, 14, 21]]"
- "IF_ICMP_EQUALS:[[20, 0, 61]]"
- "MEM_HANDLE_COUNT_DOWN:[[20, 21]]"
- "IF_ICMP_GREATER_THAN:[[21, 0, 53]]"
- "COPY:[[3, 22]]"
- "COPY:[[0, 3]]"
- "LOAD_POOL:[[#5(INVOKE_XTABLE):XTable:STATIC[cc/squirreljme/jvm/summercoat/L
  ogicHandler], 23]]"
- "LOAD_POOL:[[#19(INVOKED_METHOD):STATIC+cc/squirreljme/jvm/summercoat/LogicH
  andler::gcMemHandle(I)V, 26]]"
- "MEM_HANDLE_OFF_LOAD_INTEGER_REG_JAVA:[[24, 23, 26]]"
- "INTEGER_ADD_CONST:[[26, 4, 26]]"
- "MEM_HANDLE_OFF_LOAD_INTEGER_REG_JAVA:[[25, 23, 26]]"
- "INVOKE_POINTER_AND_POOL:[[24, 25, R[20]]]"
- "IF_ICMP_NOT_EQUALS:[[3, 0, 8]]"
- "COPY:[[22, 3]]"
- "IF_ICMP_NOT_EQUALS:[[3, 0, 1792]]"
- "COPY:[[0, 20]]"
- "IF_ICMP_NOT_EQUALS:[[3, 0, 1784]]"