[AArch64] Implement a couple instructions in the emitter.
Implements LD2R. Implements LD1R/LD2R with post-indexing support. Implements vector min/max instructions.
This commit is contained in:
parent
7b0a65e295
commit
3d2b116323
|
@ -2673,6 +2673,18 @@ void ARM64FloatEmitter::LD1R(u8 size, ARM64Reg Rt, ARM64Reg Rn)
|
||||||
{
|
{
|
||||||
EmitLoadStoreSingleStructure(1, 0, 6, 0, size >> 4, Rt, Rn);
|
EmitLoadStoreSingleStructure(1, 0, 6, 0, size >> 4, Rt, Rn);
|
||||||
}
|
}
|
||||||
|
void ARM64FloatEmitter::LD2R(u8 size, ARM64Reg Rt, ARM64Reg Rn)
|
||||||
|
{
|
||||||
|
EmitLoadStoreSingleStructure(1, 1, 6, 0, size >> 4, Rt, Rn);
|
||||||
|
}
|
||||||
|
void ARM64FloatEmitter::LD1R(u8 size, ARM64Reg Rt, ARM64Reg Rn, ARM64Reg Rm)
|
||||||
|
{
|
||||||
|
EmitLoadStoreSingleStructure(1, 0, 6, 0, size >> 4, Rt, Rn, Rm);
|
||||||
|
}
|
||||||
|
void ARM64FloatEmitter::LD2R(u8 size, ARM64Reg Rt, ARM64Reg Rn, ARM64Reg Rm)
|
||||||
|
{
|
||||||
|
EmitLoadStoreSingleStructure(1, 1, 6, 0, size >> 4, Rt, Rn, Rm);
|
||||||
|
}
|
||||||
|
|
||||||
void ARM64FloatEmitter::ST1(u8 size, ARM64Reg Rt, u8 index, ARM64Reg Rn)
|
void ARM64FloatEmitter::ST1(u8 size, ARM64Reg Rt, u8 index, ARM64Reg Rn)
|
||||||
{
|
{
|
||||||
|
@ -3026,10 +3038,18 @@ void ARM64FloatEmitter::FADD(u8 size, ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm)
|
||||||
{
|
{
|
||||||
EmitThreeSame(0, size >> 6, 0x1A, Rd, Rn, Rm);
|
EmitThreeSame(0, size >> 6, 0x1A, Rd, Rn, Rm);
|
||||||
}
|
}
|
||||||
|
void ARM64FloatEmitter::FMAX(u8 size, ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm)
|
||||||
|
{
|
||||||
|
EmitThreeSame(0, size >> 6, 0b11110, Rd, Rn, Rm);
|
||||||
|
}
|
||||||
void ARM64FloatEmitter::FMLA(u8 size, ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm)
|
void ARM64FloatEmitter::FMLA(u8 size, ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm)
|
||||||
{
|
{
|
||||||
EmitThreeSame(0, size >> 6, 0x19, Rd, Rn, Rm);
|
EmitThreeSame(0, size >> 6, 0x19, Rd, Rn, Rm);
|
||||||
}
|
}
|
||||||
|
void ARM64FloatEmitter::FMIN(u8 size, ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm)
|
||||||
|
{
|
||||||
|
EmitThreeSame(0, 2 | size >> 6, 0b11110, Rd, Rn, Rm);
|
||||||
|
}
|
||||||
void ARM64FloatEmitter::FCVTL(u8 size, ARM64Reg Rd, ARM64Reg Rn)
|
void ARM64FloatEmitter::FCVTL(u8 size, ARM64Reg Rd, ARM64Reg Rn)
|
||||||
{
|
{
|
||||||
Emit2RegMisc(false, 0, size >> 6, 0x17, Rd, Rn);
|
Emit2RegMisc(false, 0, size >> 6, 0x17, Rd, Rn);
|
||||||
|
|
|
@ -750,6 +750,9 @@ public:
|
||||||
void LD1(u8 size, ARM64Reg Rt, u8 index, ARM64Reg Rn);
|
void LD1(u8 size, ARM64Reg Rt, u8 index, ARM64Reg Rn);
|
||||||
void LD1(u8 size, ARM64Reg Rt, u8 index, ARM64Reg Rn, ARM64Reg Rm);
|
void LD1(u8 size, ARM64Reg Rt, u8 index, ARM64Reg Rn, ARM64Reg Rm);
|
||||||
void LD1R(u8 size, ARM64Reg Rt, ARM64Reg Rn);
|
void LD1R(u8 size, ARM64Reg Rt, ARM64Reg Rn);
|
||||||
|
void LD2R(u8 size, ARM64Reg Rt, ARM64Reg Rn);
|
||||||
|
void LD1R(u8 size, ARM64Reg Rt, ARM64Reg Rn, ARM64Reg Rm);
|
||||||
|
void LD2R(u8 size, ARM64Reg Rt, ARM64Reg Rn, ARM64Reg Rm);
|
||||||
void ST1(u8 size, ARM64Reg Rt, u8 index, ARM64Reg Rn);
|
void ST1(u8 size, ARM64Reg Rt, u8 index, ARM64Reg Rn);
|
||||||
void ST1(u8 size, ARM64Reg Rt, u8 index, ARM64Reg Rn, ARM64Reg Rm);
|
void ST1(u8 size, ARM64Reg Rt, u8 index, ARM64Reg Rn, ARM64Reg Rm);
|
||||||
|
|
||||||
|
@ -799,8 +802,10 @@ public:
|
||||||
void DUP(u8 size, ARM64Reg Rd, ARM64Reg Rn, u8 index);
|
void DUP(u8 size, ARM64Reg Rd, ARM64Reg Rn, u8 index);
|
||||||
void FABS(u8 size, ARM64Reg Rd, ARM64Reg Rn);
|
void FABS(u8 size, ARM64Reg Rd, ARM64Reg Rn);
|
||||||
void FADD(u8 size, ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm);
|
void FADD(u8 size, ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm);
|
||||||
|
void FMAX(u8 size, ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm);
|
||||||
void FMLA(u8 size, ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm);
|
void FMLA(u8 size, ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm);
|
||||||
void FMLS(u8 size, ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm);
|
void FMLS(u8 size, ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm);
|
||||||
|
void FMIN(u8 size, ARM64Reg Rd, ARM64Reg Rn, ARM64Reg Rm);
|
||||||
void FCVTL(u8 size, ARM64Reg Rd, ARM64Reg Rn);
|
void FCVTL(u8 size, ARM64Reg Rd, ARM64Reg Rn);
|
||||||
void FCVTL2(u8 size, ARM64Reg Rd, ARM64Reg Rn);
|
void FCVTL2(u8 size, ARM64Reg Rd, ARM64Reg Rn);
|
||||||
void FCVTN(u8 dest_size, ARM64Reg Rd, ARM64Reg Rn);
|
void FCVTN(u8 dest_size, ARM64Reg Rd, ARM64Reg Rn);
|
||||||
|
|
Loading…
Reference in New Issue