mirror of
https://github.com/dlang/dmd.git
synced 2025-04-29 22:50:27 +03:00
disassembler addv instruction (#20776)
This commit is contained in:
parent
ab76473eb7
commit
128d56dd04
1 changed files with 13 additions and 3 deletions
|
@ -1857,12 +1857,21 @@ void disassemble(uint c) @trusted
|
||||||
uint Rd = field(ins, 4, 0);
|
uint Rd = field(ins, 4, 0);
|
||||||
//printf("ins:%08x Q:%d U:%d size:%d opcode:%x Rn:%d Rd:%d\n", ins, Q, U, size, opcode, Rn, Rd);
|
//printf("ins:%08x Q:%d U:%d size:%d opcode:%x Rn:%d Rd:%d\n", ins, Q, U, size, opcode, Rn, Rd);
|
||||||
|
|
||||||
if (U == 1 && opcode == 3)
|
immutable string[8] sizeQ = ["8b","16b","4h","8h","","4s","",""];
|
||||||
|
|
||||||
|
if (U == 0 && opcode == 0x1B) // https://www.scs.stanford.edu/~zyedidia/arm64/addv_advsimd.html
|
||||||
|
{
|
||||||
|
p1 = "addv";
|
||||||
|
p2 = fregString(rbuf[0 .. 4], "bhs "[size], Rd);
|
||||||
|
|
||||||
|
uint n = snprintf(buf.ptr, cast(uint)buf.length, "v%d.%s", Rn, sizeQ[size * 2 + Q].ptr);
|
||||||
|
p3 = buf[0 .. n];
|
||||||
|
}
|
||||||
|
else if (U == 1 && opcode == 3) // https://www.scs.stanford.edu/~zyedidia/arm64/uaddlv_advsimd.html
|
||||||
{
|
{
|
||||||
p1 = "uaddlv";
|
p1 = "uaddlv";
|
||||||
p2 = fregString(rbuf[0 .. 4], "hsd "[size], Rd);
|
p2 = fregString(rbuf[0 .. 4], "hsd "[size], Rd);
|
||||||
|
|
||||||
immutable string[8] sizeQ = ["8b","16b","4h","8h","","4s","",""];
|
|
||||||
uint n = snprintf(buf.ptr, cast(uint)buf.length, "v%d.%s", Rn, sizeQ[size * 2 + Q].ptr);
|
uint n = snprintf(buf.ptr, cast(uint)buf.length, "v%d.%s", Rn, sizeQ[size * 2 + Q].ptr);
|
||||||
p3 = buf[0 .. n];
|
p3 = buf[0 .. n];
|
||||||
}
|
}
|
||||||
|
@ -2759,8 +2768,9 @@ unittest
|
||||||
unittest
|
unittest
|
||||||
{
|
{
|
||||||
int line64 = __LINE__;
|
int line64 = __LINE__;
|
||||||
string[65] cases64 = // 64 bit code gen
|
string[66] cases64 = // 64 bit code gen
|
||||||
[
|
[
|
||||||
|
"0E 31 BB FF addv b31,v31.8b",
|
||||||
"2E 30 38 00 uaddlv h0,v0.8b",
|
"2E 30 38 00 uaddlv h0,v0.8b",
|
||||||
"0E 20 58 00 cnt v0.8b,v0.8b",
|
"0E 20 58 00 cnt v0.8b,v0.8b",
|
||||||
"1E 27 01 00 fmov s0,w8",
|
"1E 27 01 00 fmov s0,w8",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue