emit_arm64_vector: Fix VectorTableLookup64
This commit is contained in:
parent
99d5caa06d
commit
0a5ebd5b57
1 changed files with 12 additions and 8 deletions
|
@ -1561,12 +1561,14 @@ void EmitIR<IR::Opcode::VectorTableLookup64>(oaknut::CodeGenerator& code, EmitCo
|
||||||
|
|
||||||
switch (table_size) {
|
switch (table_size) {
|
||||||
case 1:
|
case 1:
|
||||||
code.MOVI(V0.B16(), 0xff);
|
code.MOVI(V2.B16(), 0x08);
|
||||||
code.MOV(V0.D()[0], Dtable[0]->Delem()[0]);
|
code.CMGE(V2.B8(), Dindices->B8(), V2.B8());
|
||||||
|
code.ORR(V2.B8(), Dindices->B8(), V2.B8());
|
||||||
|
code.FMOV(D0, Dtable[0]);
|
||||||
if (is_defaults_zero) {
|
if (is_defaults_zero) {
|
||||||
code.TBL(Dresult->B8(), oaknut::List{V0.B16()}, Dindices->B8());
|
code.TBL(Dresult->B8(), oaknut::List{V0.B16()}, D2.B8());
|
||||||
} else {
|
} else {
|
||||||
code.TBX(Dresult->B8(), oaknut::List{V0.B16()}, Dindices->B8());
|
code.TBX(Dresult->B8(), oaknut::List{V0.B16()}, D2.B8());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -1578,13 +1580,15 @@ void EmitIR<IR::Opcode::VectorTableLookup64>(oaknut::CodeGenerator& code, EmitCo
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
|
code.MOVI(V2.B16(), 0x18);
|
||||||
|
code.CMGE(V2.B8(), Dindices->B8(), V2.B8());
|
||||||
|
code.ORR(V2.B8(), Dindices->B8(), V2.B8());
|
||||||
code.ZIP1(V0.D2(), Dtable[0]->toQ().D2(), Dtable[1]->toQ().D2());
|
code.ZIP1(V0.D2(), Dtable[0]->toQ().D2(), Dtable[1]->toQ().D2());
|
||||||
code.MOVI(V0.B16(), 0xff);
|
code.FMOV(D1, Dtable[2]);
|
||||||
code.MOV(V0.D()[0], Dtable[2]->Delem()[0]);
|
|
||||||
if (is_defaults_zero) {
|
if (is_defaults_zero) {
|
||||||
code.TBL(Dresult->B8(), oaknut::List{V0.B16(), V1.B16()}, Dindices->B8());
|
code.TBL(Dresult->B8(), oaknut::List{V0.B16(), V1.B16()}, D2.B8());
|
||||||
} else {
|
} else {
|
||||||
code.TBX(Dresult->B8(), oaknut::List{V0.B16(), V1.B16()}, Dindices->B8());
|
code.TBX(Dresult->B8(), oaknut::List{V0.B16(), V1.B16()}, D2.B8());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
|
|
Loading…
Reference in a new issue