@@ -265,6 +265,7 @@ void disassemble(uint c) @trusted
265
265
const (char )[] s2;
266
266
const (char )[] s3;
267
267
char [BUFMAX ] buf = ' \0 ' ;
268
+ char [BUFMAX ] url2buf = ' \0 ' ;
268
269
char [14 ] rbuf = ' \0 ' ;
269
270
270
271
buf[0 ] = 0 ;
@@ -489,8 +490,8 @@ void disassemble(uint c) @trusted
489
490
ulong imm = decodeNImmrImms(N,immr,imms);
490
491
p4 = wordtostring(imm);
491
492
492
- uint n = snprintf(buf .ptr, buf .length, " %s_log_imm" , p1.ptr);
493
- url2 = buf [0 .. n];
493
+ uint n = snprintf(url2buf .ptr, url2buf .length, " %s_log_imm" , p1.ptr);
494
+ url2 = url2buf [0 .. n];
494
495
495
496
if (opc == 3 && Rd == 0x1F )
496
497
{
@@ -1861,8 +1862,8 @@ void disassemble(uint c) @trusted
1861
1862
p2 = fregString(rbuf[0 .. 4 ]," sd h" [size & 1 ],Rd);
1862
1863
p3 = fregString(rbuf[4 .. 8 ]," sd h" [size & 1 ],Rn);
1863
1864
1864
- uint n = snprintf(buf .ptr, buf .length, " %s_advsimd_int" , p1.ptr);
1865
- url2 = buf [0 .. n];
1865
+ uint n = snprintf(url2buf .ptr, url2buf .length, " %s_advsimd_int" , p1.ptr);
1866
+ url2 = url2buf [0 .. n];
1866
1867
}
1867
1868
}
1868
1869
else
@@ -2128,8 +2129,8 @@ void disassemble(uint c) @trusted
2128
2129
p2 = rbuf[0 .. n];
2129
2130
p3 = regString(sf,Rn);
2130
2131
}
2131
- uint n = snprintf(buf .ptr, buf .length, " %s_float" , p1.ptr);
2132
- url2 = buf [0 .. n];
2132
+ uint n = snprintf(url2buf .ptr, url2buf .length, " %s_float" , p1.ptr);
2133
+ url2 = url2buf [0 .. n];
2133
2134
}
2134
2135
}
2135
2136
else
@@ -2238,8 +2239,8 @@ void disassemble(uint c) @trusted
2238
2239
p3 = fregString(rbuf[4 .. 8 ],prefix,Rn);
2239
2240
p4 = fregString(rbuf[8 .. 12 ],prefix,Rm);
2240
2241
2241
- uint n = snprintf(buf .ptr, buf .length, " %s_float.html" , p1.ptr);
2242
- url2 = buf [0 .. n];
2242
+ uint n = snprintf(url2buf .ptr, url2buf .length, " %s_float.html" , p1.ptr);
2243
+ url2 = url2buf [0 .. n];
2243
2244
}
2244
2245
}
2245
2246
@@ -2320,13 +2321,18 @@ void disassemble(uint c) @trusted
2320
2321
case decode2 (0 ,1 ,0 ):
2321
2322
case decode2 (1 ,1 ,0 ):
2322
2323
case decode2 (2 ,0 ,0 ):
2323
- case decode2 (2 ,1 ,0 ): p1 = op24 == 0 ? " stnp" : " stp" ; break ;
2324
+ case decode2 (2 ,1 ,0 ): p1 = op24 == 0 ? " stnp" : " stp" ; goto Lurl2 ;
2324
2325
2325
2326
case decode2 (0 ,0 ,1 ):
2326
2327
case decode2 (0 ,1 ,1 ):
2327
2328
case decode2 (1 ,1 ,1 ):
2328
2329
case decode2 (2 ,0 ,1 ):
2329
- case decode2 (2 ,1 ,1 ): p1 = op24 == 0 ? " ldnp" : " ldp" ; break ;
2330
+ case decode2 (2 ,1 ,1 ): p1 = op24 == 0 ? " ldnp" : " ldp" ; goto Lurl2;
2331
+
2332
+ Lurl2:
2333
+ uint n = snprintf(url2buf.ptr, url2buf.length, " %s_gen" , p1.ptr);
2334
+ url2 = url2buf[0 .. n];
2335
+ break ;
2330
2336
2331
2337
case decode2 (1 ,0 ,0 ): if (op24) p1 = " stgp" ; break ;
2332
2338
case decode2 (1 ,0 ,1 ): if (op24) p1 = " ldpsw" ; break ;
@@ -2378,6 +2384,7 @@ void disassemble(uint c) @trusted
2378
2384
uint ldr (uint size, uint VR , uint opc) { return (size << 3 ) | (VR << 2 ) | opc; }
2379
2385
2380
2386
bool is64 = false ;
2387
+ const (char )* format = " %s_imm" ;
2381
2388
switch (ldr(size, VR , opc))
2382
2389
{
2383
2390
case ldr (0 ,0 ,0 ): p1 = " strb" ; goto Lldr8; // https://www.scs.stanford.edu/~zyedidia/arm64/strb_imm.html
@@ -2393,11 +2400,11 @@ void disassemble(uint c) @trusted
2393
2400
case ldr (1 ,0 ,1 ): p1 = " ldrh" ; goto Lldr;
2394
2401
case ldr (1 ,0 ,2 ): p1 = " ldrsh" ; goto Lldr64;
2395
2402
case ldr (1 ,0 ,3 ): p1 = " ldrsh" ; goto Lldr;
2396
- case ldr (2 ,0 ,0 ): p1 = " str" ; goto Lldr;
2397
- case ldr (2 ,0 ,1 ): p1 = " ldr" ; goto Lldr;
2403
+ case ldr (2 ,0 ,0 ): p1 = " str" ; format = " %s_imm_gen " ; goto Lldr;
2404
+ case ldr (2 ,0 ,1 ): p1 = " ldr" ; format = " %s_imm_gen " ; goto Lldr;
2398
2405
case ldr (2 ,0 ,2 ): p1 = " ldrsw" ; goto Lldrsw;
2399
- case ldr (3 ,0 ,0 ): p1 = " str" ; goto Lldr64;
2400
- case ldr (3 ,0 ,1 ): p1 = " ldr" ; goto Lldr64;
2406
+ case ldr (3 ,0 ,0 ): p1 = " str" ; format = " %s_imm_gen " ; goto Lldr64;
2407
+ case ldr (3 ,0 ,1 ): p1 = " ldr" ; format = " %s_imm_gen " ; goto Lldr64;
2401
2408
// case ldr(3,0,2): p1 = "prfm";
2402
2409
Lldrsw:
2403
2410
p2 = regString(true , Rt);
@@ -2422,15 +2429,22 @@ void disassemble(uint c) @trusted
2422
2429
case ldr (3 ,1 ,0 ): p1 = " str" ; goto LsimdFp;
2423
2430
case ldr (3 ,1 ,1 ): p1 = " ldr" ; goto LsimdFp;
2424
2431
LsimdFp:
2432
+ format = " %s_imm_fpsimd" ;
2425
2433
uint shift = size + ((opc & 2 ) << 1 );
2426
2434
p2 = fregString(buf[0 .. 4 ], fpPrefix[shift], Rt);
2427
2435
uint offset = imm12 << shift;
2428
2436
p3 = eaString(0 , cast (ubyte )Rn, offset);
2429
2437
break ;
2430
2438
2431
2439
default :
2440
+ format = null ;
2432
2441
break ;
2433
2442
}
2443
+ if (format)
2444
+ {
2445
+ uint n = snprintf(url2buf.ptr, url2buf.length, format, p1.ptr);
2446
+ url2 = url2buf[0 .. n];
2447
+ }
2434
2448
}
2435
2449
}
2436
2450
// printf("%x\n", field(ins, 31, 25));
0 commit comments