@@ -265,6 +265,7 @@ void disassemble(uint c) @trusted
265265 const (char )[] s2;
266266 const (char )[] s3;
267267 char [BUFMAX ] buf = ' \0 ' ;
268+ char [BUFMAX ] url2buf = ' \0 ' ;
268269 char [14 ] rbuf = ' \0 ' ;
269270
270271 buf[0 ] = 0 ;
@@ -489,8 +490,8 @@ void disassemble(uint c) @trusted
489490 ulong imm = decodeNImmrImms(N,immr,imms);
490491 p4 = wordtostring(imm);
491492
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];
494495
495496 if (opc == 3 && Rd == 0x1F )
496497 {
@@ -1861,8 +1862,8 @@ void disassemble(uint c) @trusted
18611862 p2 = fregString(rbuf[0 .. 4 ]," sd h" [size & 1 ],Rd);
18621863 p3 = fregString(rbuf[4 .. 8 ]," sd h" [size & 1 ],Rn);
18631864
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];
18661867 }
18671868 }
18681869 else
@@ -2128,8 +2129,8 @@ void disassemble(uint c) @trusted
21282129 p2 = rbuf[0 .. n];
21292130 p3 = regString(sf,Rn);
21302131 }
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];
21332134 }
21342135 }
21352136 else
@@ -2238,8 +2239,8 @@ void disassemble(uint c) @trusted
22382239 p3 = fregString(rbuf[4 .. 8 ],prefix,Rn);
22392240 p4 = fregString(rbuf[8 .. 12 ],prefix,Rm);
22402241
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];
22432244 }
22442245 }
22452246
@@ -2320,13 +2321,18 @@ void disassemble(uint c) @trusted
23202321 case decode2 (0 ,1 ,0 ):
23212322 case decode2 (1 ,1 ,0 ):
23222323 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 ;
23242325
23252326 case decode2 (0 ,0 ,1 ):
23262327 case decode2 (0 ,1 ,1 ):
23272328 case decode2 (1 ,1 ,1 ):
23282329 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 ;
23302336
23312337 case decode2 (1 ,0 ,0 ): if (op24) p1 = " stgp" ; break ;
23322338 case decode2 (1 ,0 ,1 ): if (op24) p1 = " ldpsw" ; break ;
@@ -2378,6 +2384,7 @@ void disassemble(uint c) @trusted
23782384 uint ldr (uint size, uint VR , uint opc) { return (size << 3 ) | (VR << 2 ) | opc; }
23792385
23802386 bool is64 = false ;
2387+ const (char )* format = " %s_imm" ;
23812388 switch (ldr(size, VR , opc))
23822389 {
23832390 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
23932400 case ldr (1 ,0 ,1 ): p1 = " ldrh" ; goto Lldr;
23942401 case ldr (1 ,0 ,2 ): p1 = " ldrsh" ; goto Lldr64;
23952402 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;
23982405 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;
24012408 // case ldr(3,0,2): p1 = "prfm";
24022409 Lldrsw:
24032410 p2 = regString(true , Rt);
@@ -2422,15 +2429,22 @@ void disassemble(uint c) @trusted
24222429 case ldr (3 ,1 ,0 ): p1 = " str" ; goto LsimdFp;
24232430 case ldr (3 ,1 ,1 ): p1 = " ldr" ; goto LsimdFp;
24242431 LsimdFp:
2432+ format = " %s_imm_fpsimd" ;
24252433 uint shift = size + ((opc & 2 ) << 1 );
24262434 p2 = fregString(buf[0 .. 4 ], fpPrefix[shift], Rt);
24272435 uint offset = imm12 << shift;
24282436 p3 = eaString(0 , cast (ubyte )Rn, offset);
24292437 break ;
24302438
24312439 default :
2440+ format = null ;
24322441 break ;
24332442 }
2443+ if (format)
2444+ {
2445+ uint n = snprintf(url2buf.ptr, url2buf.length, format, p1.ptr);
2446+ url2 = url2buf[0 .. n];
2447+ }
24342448 }
24352449 }
24362450 // printf("%x\n", field(ins, 31, 25));
0 commit comments