ronnie
2022-10-14 1504bb53e29d3d46222c0b3ea994fc494b48e153
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
const char* const VixlJniHelpersResults[] = {
  "   0:    e92d 4de0     stmdb    sp!, {r5, r6, r7, r8, sl, fp, lr}\n",
  "   4:    ed2d 8a10     vpush    {s16-s31}\n",
  "   8:    b089          sub    sp, #36    ; 0x24\n",
  "   a:    9000          str    r0, [sp, #0]\n",
  "   c:    9121          str    r1, [sp, #132]    ; 0x84\n",
  "   e:    ed8d 0a22     vstr    s0, [sp, #136]    ; 0x88\n",
  "  12:    9223          str    r2, [sp, #140]    ; 0x8c\n",
  "  14:    9324          str    r3, [sp, #144]    ; 0x90\n",
  "  16:    b088          sub    sp, #32\n",
  "  18:    f5ad 5d80     sub.w    sp, sp, #4096    ; 0x1000\n",
  "  1c:    9808          ldr    r0, [sp, #32]\n",
  "  1e:    981f          ldr    r0, [sp, #124]    ; 0x7c\n",
  "  20:    9821          ldr    r0, [sp, #132]    ; 0x84\n",
  "  22:    98ff          ldr    r0, [sp, #1020]    ; 0x3fc\n",
  "  24:    f8dd 0400     ldr.w    r0, [sp, #1024]    ; 0x400\n",
  "  28:    f8dd cffc     ldr.w    ip, [sp, #4092]    ; 0xffc\n",
  "  2c:    f50d 5c80     add.w    ip, sp, #4096    ; 0x1000\n",
  "  30:    f8dc c000     ldr.w    ip, [ip]\n",
  "  34:    f8d9 c200     ldr.w    ip, [r9, #512]    ; 0x200\n",
  "  38:    f8dc 0080     ldr.w    r0, [ip, #128]    ; 0x80\n",
  "  3c:    9008          str    r0, [sp, #32]\n",
  "  3e:    901f          str    r0, [sp, #124]    ; 0x7c\n",
  "  40:    9021          str    r0, [sp, #132]    ; 0x84\n",
  "  42:    90ff          str    r0, [sp, #1020]    ; 0x3fc\n",
  "  44:    f8cd 0400     str.w    r0, [sp, #1024]    ; 0x400\n",
  "  48:    f8cd cffc     str.w    ip, [sp, #4092]    ; 0xffc\n",
  "  4c:    f84d 5d04     str.w    r5, [sp, #-4]!\n",
  "  50:    f50d 5580     add.w    r5, sp, #4096    ; 0x1000\n",
  "  54:    f8c5 c004     str.w    ip, [r5, #4]\n",
  "  58:    f85d 5b04     ldr.w    r5, [sp], #4\n",
  "  5c:    f04f 0cff     mov.w    ip, #255    ; 0xff\n",
  "  60:    f8cd c030     str.w    ip, [sp, #48]    ; 0x30\n",
  "  64:    f06f 4c7f     mvn.w    ip, #4278190080    ; 0xff000000\n",
  "  68:    f8cd c030     str.w    ip, [sp, #48]    ; 0x30\n",
  "  6c:    f8cd c030     str.w    ip, [sp, #48]    ; 0x30\n",
  "  70:    f8cd c030     str.w    ip, [sp, #48]    ; 0x30\n",
  "  74:    900c          str    r0, [sp, #48]    ; 0x30\n",
  "  76:    f8dd c030     ldr.w    ip, [sp, #48]    ; 0x30\n",
  "  7a:    f8cd c034     str.w    ip, [sp, #52]    ; 0x34\n",
  "  7e:    f50d 5c80     add.w    ip, sp, #4096    ; 0x1000\n",
  "  82:    f8c9 c200     str.w    ip, [r9, #512]    ; 0x200\n",
  "  86:    f8c9 d200     str.w    sp, [r9, #512]    ; 0x200\n",
  "  8a:    f8d0 c030     ldr.w    ip, [r0, #48]    ; 0x30\n",
  "  8e:    47e0          blx    ip\n",
  "  90:    f8dd c02c     ldr.w    ip, [sp, #44]    ; 0x2c\n",
  "  94:    f8cd c030     str.w    ip, [sp, #48]    ; 0x30\n",
  "  98:    f8d9 c200     ldr.w    ip, [r9, #512]    ; 0x200\n",
  "  9c:    f8cd c02c     str.w    ip, [sp, #44]    ; 0x2c\n",
  "  a0:    f8dd c02c     ldr.w    ip, [sp, #44]    ; 0x2c\n",
  "  a4:    f8cd c030     str.w    ip, [sp, #48]    ; 0x30\n",
  "  a8:    4648          mov    r0, r9\n",
  "  aa:    f8cd 9030     str.w    r9, [sp, #48]    ; 0x30\n",
  "  ae:    4684          mov    ip, r0\n",
  "  b0:    f1bc 0f00     cmp.w    ip, #0\n",
  "  b4:    bf18          it    ne\n",
  "  b6:    f10d 0c30     addne.w    ip, sp, #48    ; 0x30\n",
  "  ba:    f10d 0c30     add.w    ip, sp, #48    ; 0x30\n",
  "  be:    f1bc 0f00     cmp.w    ip, #0\n",
  "  c2:    bf0c          ite    eq\n",
  "  c4:    2000          moveq    r0, #0\n",
  "  c6:    a80c          addne    r0, sp, #48    ; 0x30\n",
  "  c8:    f8dd c040     ldr.w    ip, [sp, #64]    ; 0x40\n",
  "  cc:    f1bc 0f00     cmp.w    ip, #0\n",
  "  d0:    bf18          it    ne\n",
  "  d2:    f10d 0c40     addne.w    ip, sp, #64    ; 0x40\n",
  "  d6:    f8cd c030     str.w    ip, [sp, #48]    ; 0x30\n",
  "  da:    f1bc 0f00     cmp.w    ip, #0\n",
  "  de:    bf0c          ite    eq\n",
  "  e0:    2000          moveq    r0, #0\n",
  "  e2:    4668          movne    r0, sp\n",
  "  e4:    f1bc 0f00     cmp.w    ip, #0\n",
  "  e8:    bf0c          ite    eq\n",
  "  ea:    2000          moveq    r0, #0\n",
  "  ec:    f20d 4001     addwne    r0, sp, #1025    ; 0x401\n",
  "  f0:    f1bc 0f00     cmp.w    ip, #0\n",
  "  f4:    bf18          it    ne\n",
  "  f6:    f20d 4c01     addwne    ip, sp, #1025    ; 0x401\n",
  "  fa:    f8d9 c09c     ldr.w    ip, [r9, #156]    ; 0x9c\n",
  "  fe:    f1bc 0f00     cmp.w    ip, #0\n",
  " 102:    d171          bne.n    1e8 <VixlJniHelpers+0x1e8>\n",
  " 104:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 108:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 10c:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 110:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 114:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 118:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 11c:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 120:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 124:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 128:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 12c:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 130:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 134:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 138:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 13c:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 140:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 144:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 148:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 14c:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 150:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 154:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 158:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 15c:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 160:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 164:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 168:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 16c:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 170:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 174:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 178:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 17c:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 180:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 184:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 188:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 18c:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 190:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 194:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 198:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 19c:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1a0:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1a4:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1a8:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1ac:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1b0:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1b4:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1b8:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1bc:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1c0:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1c4:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1c8:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1cc:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1d0:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1d4:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1d8:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1dc:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1e0:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1e4:    f000 b802     b.w    1ec <VixlJniHelpers+0x1ec>\n",
  " 1e8:    f000 b81b     b.w    222 <VixlJniHelpers+0x222>\n",
  " 1ec:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1f0:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1f4:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1f8:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 1fc:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 200:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 204:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 208:    f8cd c7ff     str.w    ip, [sp, #2047]    ; 0x7ff\n",
  " 20c:    f50d 5d80     add.w    sp, sp, #4096    ; 0x1000\n",
  " 210:    b008          add    sp, #32\n",
  " 212:    b009          add    sp, #36    ; 0x24\n",
  " 214:    ecbd 8a10     vpop    {s16-s31}\n",
  " 218:    e8bd 4de0     ldmia.w    sp!, {r5, r6, r7, r8, sl, fp, lr}\n",
  " 21c:    f8d9 8034     ldr.w    r8, [r9, #52]    ; 0x34\n",
  " 220:    4770          bx    lr\n",
  " 222:    4660          mov    r0, ip\n",
  " 224:    f8d9 c2e4     ldr.w    ip, [r9, #740]    ; 0x2e4\n",
  " 228:    47e0          blx    ip\n",
  nullptr
};
 
const char* const VixlLoadFromOffsetResults[] = {
  "   0:  68e2        ldr r2, [r4, #12]\n",
  "   2:  f8d4 2fff   ldr.w r2, [r4, #4095] ; 0xfff\n",
  "   6:  f504 5280   add.w r2, r4, #4096 ; 0x1000\n",
  "   a:  6812        ldr r2, [r2, #0]\n",
  "   c:  f504 1280   add.w r2, r4, #1048576  ; 0x100000\n",
  "  10:  f8d2 20a4   ldr.w r2, [r2, #164]  ; 0xa4\n",
  "  14:  f44f 5280   mov.w r2, #4096 ; 0x1000\n",
  "  18:  f2c0 0210   movt  r2, #16\n",
  "  1c:  4422        add r2, r4\n",
  "  1e:  6812        ldr r2, [r2, #0]\n",
  "  20:  f44f 5c80   mov.w ip, #4096 ; 0x1000\n",
  "  24:  f2c0 0c10   movt  ip, #16\n",
  "  28:  4464        add r4, ip\n",
  "  2a:  6824        ldr r4, [r4, #0]\n",
  "  2c:  89a2        ldrh  r2, [r4, #12]\n",
  "  2e:  f8b4 2fff   ldrh.w  r2, [r4, #4095] ; 0xfff\n",
  "  32:  f504 5280   add.w r2, r4, #4096 ; 0x1000\n",
  "  36:  8812        ldrh  r2, [r2, #0]\n",
  "  38:  f504 1280   add.w r2, r4, #1048576  ; 0x100000\n",
  "  3c:  f8b2 20a4   ldrh.w  r2, [r2, #164]  ; 0xa4\n",
  "  40:  f44f 5280   mov.w r2, #4096 ; 0x1000\n",
  "  44:  f2c0 0210   movt  r2, #16\n",
  "  48:  4422        add r2, r4\n",
  "  4a:  8812        ldrh  r2, [r2, #0]\n",
  "  4c:  f44f 5c80   mov.w ip, #4096 ; 0x1000\n",
  "  50:  f2c0 0c10   movt  ip, #16\n",
  "  54:  4464        add r4, ip\n",
  "  56:  8824        ldrh  r4, [r4, #0]\n",
  "  58:  e9d4 2303   ldrd  r2, r3, [r4, #12]\n",
  "  5c:  e9d4 23ff   ldrd  r2, r3, [r4, #1020] ; 0x3fc\n",
  "  60:  f504 6280   add.w r2, r4, #1024 ; 0x400\n",
  "  64:  e9d2 2300   ldrd  r2, r3, [r2]\n",
  "  68:  f504 2280   add.w r2, r4, #262144 ; 0x40000\n",
  "  6c:  e9d2 2329   ldrd  r2, r3, [r2, #164]  ; 0xa4\n",
  "  70:  f44f 6280   mov.w r2, #1024 ; 0x400\n",
  "  74:  f2c0 0204   movt  r2, #4\n",
  "  78:  4422        add r2, r4\n",
  "  7a:  e9d2 2300   ldrd  r2, r3, [r2]\n",
  "  7e:  f44f 6c80   mov.w ip, #1024 ; 0x400\n",
  "  82:  f2c0 0c04   movt  ip, #4\n",
  "  86:  4464        add r4, ip\n",
  "  88:  e9d4 4500   ldrd  r4, r5, [r4]\n",
  "  8c:  f8dc 000c   ldr.w r0, [ip, #12]\n",
  "  90:  f5a4 1280   sub.w r2, r4, #1048576  ; 0x100000\n",
  "  94:  f8d2 20a4   ldr.w r2, [r2, #164]  ; 0xa4\n",
  "  98:  f994 200c   ldrsb.w r2, [r4, #12]\n",
  "  9c:  7b22        ldrb  r2, [r4, #12]\n",
  "  9e:  f9b4 200c   ldrsh.w r2, [r4, #12]\n",
  nullptr
};
const char* const VixlStoreToOffsetResults[] = {
  "   0:  60e2        str r2, [r4, #12]\n",
  "   2:  f8c4 2fff   str.w r2, [r4, #4095] ; 0xfff\n",
  "   6:  f504 5c80   add.w ip, r4, #4096 ; 0x1000\n",
  "   a:  f8cc 2000   str.w r2, [ip]\n",
  "   e:  f504 1c80   add.w ip, r4, #1048576  ; 0x100000\n",
  "  12:  f8cc 20a4   str.w r2, [ip, #164]  ; 0xa4\n",
  "  16:  f44f 5c80   mov.w ip, #4096 ; 0x1000\n",
  "  1a:  f2c0 0c10   movt  ip, #16\n",
  "  1e:  44a4        add ip, r4\n",
  "  20:  f8cc 2000   str.w r2, [ip]\n",
  "  24:  f44f 5c80   mov.w ip, #4096 ; 0x1000\n",
  "  28:  f2c0 0c10   movt  ip, #16\n",
  "  2c:  44a4        add ip, r4\n",
  "  2e:  f8cc 4000   str.w r4, [ip]\n",
  "  32:  81a2        strh  r2, [r4, #12]\n",
  "  34:  f8a4 2fff   strh.w  r2, [r4, #4095] ; 0xfff\n",
  "  38:  f504 5c80   add.w ip, r4, #4096 ; 0x1000\n",
  "  3c:  f8ac 2000   strh.w  r2, [ip]\n",
  "  40:  f504 1c80   add.w ip, r4, #1048576  ; 0x100000\n",
  "  44:  f8ac 20a4   strh.w  r2, [ip, #164]  ; 0xa4\n",
  "  48:  f44f 5c80   mov.w ip, #4096 ; 0x1000\n",
  "  4c:  f2c0 0c10   movt  ip, #16\n",
  "  50:  44a4        add ip, r4\n",
  "  52:  f8ac 2000   strh.w  r2, [ip]\n",
  "  56:  f44f 5c80   mov.w ip, #4096 ; 0x1000\n",
  "  5a:  f2c0 0c10   movt  ip, #16\n",
  "  5e:  44a4        add ip, r4\n",
  "  60:  f8ac 4000   strh.w  r4, [ip]\n",
  "  64:  e9c4 2303   strd  r2, r3, [r4, #12]\n",
  "  68:  e9c4 23ff   strd  r2, r3, [r4, #1020] ; 0x3fc\n",
  "  6c:  f504 6c80   add.w ip, r4, #1024 ; 0x400\n",
  "  70:  e9cc 2300   strd  r2, r3, [ip]\n",
  "  74:  f504 2c80   add.w ip, r4, #262144 ; 0x40000\n",
  "  78:  e9cc 2329   strd  r2, r3, [ip, #164]  ; 0xa4\n",
  "  7c:  f44f 6c80   mov.w ip, #1024 ; 0x400\n",
  "  80:  f2c0 0c04   movt  ip, #4\n",
  "  84:  44a4        add ip, r4\n",
  "  86:  e9cc 2300   strd  r2, r3, [ip]\n",
  "  8a:  f44f 6c80   mov.w ip, #1024 ; 0x400\n",
  "  8e:  f2c0 0c04   movt  ip, #4\n",
  "  92:  44a4        add ip, r4\n",
  "  94:  e9cc 4500   strd  r4, r5, [ip]\n",
  "  98:  f8cc 000c   str.w r0, [ip, #12]\n",
  "  9c:  f5a4 1c80   sub.w ip, r4, #1048576  ; 0x100000\n",
  "  a0:  f8cc 20a4   str.w r2, [ip, #164]  ; 0xa4\n",
  "  a4:  7322        strb  r2, [r4, #12]\n",
  nullptr
};
 
std::map<std::string, const char* const*> test_results;
void setup_results() {
    test_results["VixlJniHelpers"] = VixlJniHelpersResults;
    test_results["VixlStoreToOffset"] = VixlStoreToOffsetResults;
    test_results["VixlLoadFromOffset"] = VixlLoadFromOffsetResults;
}