mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
Proper encoding for VLDM and VSTM instructions. The register lists for these
instructions have to distinguish between lists of single- and double-precision registers in order for the ASM matcher to do a proper job. In all other respects, a list of single- or double-precision registers are the same as a list of GPR registers. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119460 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -78,7 +78,7 @@ multiclass vfp_ldst_mult<string asm, bit L_bit,
|
||||
InstrItinClass itin, InstrItinClass itin_upd> {
|
||||
// Double Precision
|
||||
def DIA :
|
||||
AXDI4<(outs), (ins GPR:$Rn, pred:$p, reglist:$regs, variable_ops),
|
||||
AXDI4<(outs), (ins GPR:$Rn, pred:$p, dpr_reglist:$regs, variable_ops),
|
||||
IndexModeNone, itin,
|
||||
!strconcat(asm, "ia${p}\t$Rn, $regs"), "", []> {
|
||||
let Inst{24-23} = 0b01; // Increment After
|
||||
@@ -86,7 +86,7 @@ multiclass vfp_ldst_mult<string asm, bit L_bit,
|
||||
let Inst{20} = L_bit;
|
||||
}
|
||||
def DIA_UPD :
|
||||
AXDI4<(outs GPR:$wb), (ins GPR:$Rn, pred:$p, reglist:$regs, variable_ops),
|
||||
AXDI4<(outs GPR:$wb), (ins GPR:$Rn, pred:$p, dpr_reglist:$regs, variable_ops),
|
||||
IndexModeUpd, itin_upd,
|
||||
!strconcat(asm, "ia${p}\t$Rn!, $regs"), "$Rn = $wb", []> {
|
||||
let Inst{24-23} = 0b01; // Increment After
|
||||
@@ -94,7 +94,7 @@ multiclass vfp_ldst_mult<string asm, bit L_bit,
|
||||
let Inst{20} = L_bit;
|
||||
}
|
||||
def DDB :
|
||||
AXDI4<(outs), (ins GPR:$Rn, pred:$p, reglist:$regs, variable_ops),
|
||||
AXDI4<(outs), (ins GPR:$Rn, pred:$p, dpr_reglist:$regs, variable_ops),
|
||||
IndexModeNone, itin,
|
||||
!strconcat(asm, "db${p}\t$Rn, $regs"), "", []> {
|
||||
let Inst{24-23} = 0b10; // Decrement Before
|
||||
@@ -102,7 +102,7 @@ multiclass vfp_ldst_mult<string asm, bit L_bit,
|
||||
let Inst{20} = L_bit;
|
||||
}
|
||||
def DDB_UPD :
|
||||
AXDI4<(outs GPR:$wb), (ins GPR:$Rn, pred:$p, reglist:$regs, variable_ops),
|
||||
AXDI4<(outs GPR:$wb), (ins GPR:$Rn, pred:$p, dpr_reglist:$regs, variable_ops),
|
||||
IndexModeUpd, itin_upd,
|
||||
!strconcat(asm, "db${p}\t$Rn!, $regs"), "$Rn = $wb", []> {
|
||||
let Inst{24-23} = 0b10; // Decrement Before
|
||||
@@ -112,7 +112,7 @@ multiclass vfp_ldst_mult<string asm, bit L_bit,
|
||||
|
||||
// Single Precision
|
||||
def SIA :
|
||||
AXSI4<(outs), (ins GPR:$Rn, pred:$p, reglist:$regs, variable_ops),
|
||||
AXSI4<(outs), (ins GPR:$Rn, pred:$p, spr_reglist:$regs, variable_ops),
|
||||
IndexModeNone, itin,
|
||||
!strconcat(asm, "ia${p}\t$Rn, $regs"), "", []> {
|
||||
let Inst{24-23} = 0b01; // Increment After
|
||||
@@ -120,7 +120,7 @@ multiclass vfp_ldst_mult<string asm, bit L_bit,
|
||||
let Inst{20} = L_bit;
|
||||
}
|
||||
def SIA_UPD :
|
||||
AXSI4<(outs GPR:$wb), (ins GPR:$Rn, pred:$p, reglist:$regs, variable_ops),
|
||||
AXSI4<(outs GPR:$wb), (ins GPR:$Rn, pred:$p, spr_reglist:$regs, variable_ops),
|
||||
IndexModeUpd, itin_upd,
|
||||
!strconcat(asm, "ia${p}\t$Rn!, $regs"), "$Rn = $wb", []> {
|
||||
let Inst{24-23} = 0b01; // Increment After
|
||||
@@ -128,7 +128,7 @@ multiclass vfp_ldst_mult<string asm, bit L_bit,
|
||||
let Inst{20} = L_bit;
|
||||
}
|
||||
def SDB :
|
||||
AXSI4<(outs), (ins GPR:$Rn, pred:$p, reglist:$regs, variable_ops),
|
||||
AXSI4<(outs), (ins GPR:$Rn, pred:$p, spr_reglist:$regs, variable_ops),
|
||||
IndexModeNone, itin,
|
||||
!strconcat(asm, "db${p}\t$Rn, $regs"), "", []> {
|
||||
let Inst{24-23} = 0b10; // Decrement Before
|
||||
@@ -136,7 +136,7 @@ multiclass vfp_ldst_mult<string asm, bit L_bit,
|
||||
let Inst{20} = L_bit;
|
||||
}
|
||||
def SDB_UPD :
|
||||
AXSI4<(outs GPR:$wb), (ins GPR:$Rn, pred:$p, reglist:$regs, variable_ops),
|
||||
AXSI4<(outs GPR:$wb), (ins GPR:$Rn, pred:$p, spr_reglist:$regs, variable_ops),
|
||||
IndexModeUpd, itin_upd,
|
||||
!strconcat(asm, "db${p}\t$Rn!, $regs"), "$Rn = $wb", []> {
|
||||
let Inst{24-23} = 0b10; // Decrement Before
|
||||
|
Reference in New Issue
Block a user