Skip to content
This repository was archived by the owner on Mar 28, 2020. It is now read-only.

Commit 975b1d7

Browse files
author
Simon Dardis
committed
[mips] Fix (dis)assembly of abs.fmt for micromips
These instructions were previously marked as codegen only preventing them from being assembled as microMIPS or disassembled. Reviewers: atanasyan, abeserminji Differential Revision: https://reviews.llvm.org/D39123 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@316656 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 525c1c6 commit 975b1d7

File tree

5 files changed

+24
-7
lines changed

5 files changed

+24
-7
lines changed

lib/Target/Mips/MicroMipsInstrFPU.td

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,16 @@ def CVT_L_S_MM : MMRel, ABSS_FT<"cvt.l.s", FGR64Opnd, FGR32Opnd, II_CVT>,
9595
def CVT_L_D64_MM : MMRel, ABSS_FT<"cvt.l.d", FGR64Opnd, FGR64Opnd, II_CVT>,
9696
ROUND_W_FM_MM<1, 0x4>, ISA_MICROMIPS, FGR_64;
9797

98-
def FABS_S_MM : MMRel, ABSS_FT<"abs.s", FGR32Opnd, FGR32Opnd, II_ABS, fabs>,
99-
ABS_FM_MM<0, 0xd>, ISA_MICROMIPS;
98+
}
99+
100+
let DecoderNamespace = "MicroMips" in {
101+
def FABS_S_MM : MMRel, ABSS_FT<"abs.s", FGR32Opnd, FGR32Opnd, II_ABS, fabs>,
102+
ABS_FM_MM<0, 0xd>, ISA_MICROMIPS;
103+
def FABS_MM : MMRel, ABSS_FT<"abs.d", AFGR64Opnd, AFGR64Opnd, II_ABS, fabs>,
104+
ABS_FM_MM<1, 0xd>, ISA_MICROMIPS, FGR_32;
105+
}
106+
107+
let isCodeGenOnly = 1 in {
100108
def FMOV_S_MM : MMRel, ABSS_FT<"mov.s", FGR32Opnd, FGR32Opnd, II_MOV_S>,
101109
ABS_FM_MM<0, 0x1>, ISA_MICROMIPS;
102110
def FNEG_S_MM : MMRel, ABSS_FT<"neg.s", FGR32Opnd, FGR32Opnd, II_NEG, fneg>,
@@ -110,8 +118,6 @@ def CVT_S_D32_MM : MMRel, ABSS_FT<"cvt.s.d", FGR32Opnd, AFGR64Opnd, II_CVT>,
110118
def CVT_S_W_MM : MMRel, ABSS_FT<"cvt.s.w", FGR32Opnd, FGR32Opnd, II_CVT>,
111119
ABS_FM_MM<1, 0x6d>, ISA_MICROMIPS;
112120

113-
def FABS_MM : MMRel, ABSS_FT<"abs.d", AFGR64Opnd, AFGR64Opnd, II_ABS, fabs>,
114-
ABS_FM_MM<1, 0xd>, ISA_MICROMIPS, FGR_32;
115121
def FNEG_MM : MMRel, ABSS_FT<"neg.d", AFGR64Opnd, AFGR64Opnd, II_NEG, fneg>,
116122
ABS_FM_MM<1, 0x2d>, ISA_MICROMIPS, FGR_32;
117123

lib/Target/Mips/MipsInstrFPU.td

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -448,11 +448,14 @@ let isPseudo = 1, isCodeGenOnly = 1 in {
448448
def PseudoCVT_D64_L : ABSS_FT<"", FGR64Opnd, GPR64Opnd, II_CVT>;
449449
}
450450

451-
def FABS_S : MMRel, ABSS_FT<"abs.s", FGR32Opnd, FGR32Opnd, II_ABS, fabs>,
452-
ABSS_FM<0x5, 16>;
451+
let AdditionalPredicates = [NotInMicroMips] in {
452+
def FABS_S : MMRel, ABSS_FT<"abs.s", FGR32Opnd, FGR32Opnd, II_ABS, fabs>,
453+
ABSS_FM<0x5, 16>;
454+
defm FABS : ABSS_M<"abs.d", II_ABS, fabs>, ABSS_FM<0x5, 17>;
455+
}
456+
453457
def FNEG_S : MMRel, ABSS_FT<"neg.s", FGR32Opnd, FGR32Opnd, II_NEG, fneg>,
454458
ABSS_FM<0x7, 16>;
455-
defm FABS : ABSS_M<"abs.d", II_ABS, fabs>, ABSS_FM<0x5, 17>;
456459
defm FNEG : ABSS_M<"neg.d", II_NEG, fneg>, ABSS_FM<0x7, 17>;
457460

458461
def FSQRT_S : MMRel, StdMMR6Rel, ABSS_FT<"sqrt.s", FGR32Opnd, FGR32Opnd,

test/MC/Disassembler/Mips/micromips32r3/valid-el.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
0x88 0x46 # CHECK: break16 8
5050
0xce 0x46 # CHECK: sdbbp16 14
5151
0x34 0x84 # CHECK: movep $5, $6, $2, $3
52+
0x40 0x54 0x7b 0x03 # CHECK: abs.s $f2, $f0
53+
0x40 0x54 0x7b 0x23 # CHECK: abs.d $f2, $f0
5254
0xe6 0x00 0x10 0x49 # CHECK: add $9, $6, $7
5355
0x26 0x11 0x67 0x45 # CHECK: addi $9, $6, 17767
5456
0x26 0x31 0x67 0xc5 # CHECK: addiu $9, $6, -15001

test/MC/Disassembler/Mips/micromips32r3/valid.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
0x46 0x88 # CHECK: break16 8
5050
0x46 0xce # CHECK: sdbbp16 14
5151
0x84 0x34 # CHECK: movep $5, $6, $2, $3
52+
0x54 0x40 0x03 0x7b # CHECK: abs.s $f2, $f0
53+
0x54 0x40 0x23 0x7b # CHECK: abs.d $f2, $f0
5254
0x00 0xe6 0x49 0x10 # CHECK: add $9, $6, $7
5355
0x11 0x26 0x45 0x67 # CHECK: addi $9, $6, 17767
5456
0x31 0x26 0xc5 0x67 # CHECK: addiu $9, $6, -15001

test/MC/Mips/micromips/valid.s

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ sdbbp16 14 # CHECK: sdbbp16 14 # encoding: [0x46,0xce]
4949
lw $3, 32($sp) # CHECK: lw $3, 32($sp) # encoding: [0x48,0x68]
5050
sw $4, 124($sp) # CHECK: sw $4, 124($sp) # encoding: [0xc8,0x9f]
5151
lw $3, 32($gp) # CHECK: lw $3, 32($gp) # encoding: [0x65,0x88]
52+
abs.s $f0, $f2 # CHECK: abs.s $f0, $f2 # encoding: [0x54,0x02,0x03,0x7b]
53+
# CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_S_MM
54+
abs.d $f4, $f6 # CHECK: abs.d $f4, $f6 # encoding: [0x54,0x86,0x23,0x7b]
55+
# CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_MM
5256
add $9, $6, $7 # CHECK: add $9, $6, $7 # encoding: [0x00,0xe6,0x49,0x10]
5357
addi $9, $6, 17767 # CHECK: addi $9, $6, 17767 # encoding: [0x11,0x26,0x45,0x67]
5458
addiu $9, $6, -15001 # CHECK: addiu $9, $6, -15001 # encoding: [0x31,0x26,0xc5,0x67]

0 commit comments

Comments
 (0)