@@ -481,9 +481,17 @@ multiclass AsI1_bin_irs<bits<4> opcod, string opc,
481
481
def rr : AsI1<opcod, (outs GPR:$dst), (ins GPR:$a, GPR:$b), DPFrm,
482
482
iir, opc, "\t$dst, $a, $b",
483
483
[(set GPR:$dst, (opnode GPR:$a, GPR:$b))]> {
484
+ bits<4> Rd;
485
+ bits<4> Rn;
486
+ bits<4> Rm;
487
+ bits<4> Cond;
484
488
let Inst{11-4} = 0b00000000;
485
489
let Inst{25} = 0;
486
490
let isCommutable = Commutable;
491
+ let Inst{3-0} = Rm;
492
+ let Inst{15-12} = Rd;
493
+ let Inst{19-16} = Rn;
494
+ let Inst{31-28} = Cond;
487
495
}
488
496
def rs : AsI1<opcod, (outs GPR:$dst), (ins GPR:$a, so_reg:$b), DPSoRegFrm,
489
497
iis, opc, "\t$dst, $a, $b",
@@ -907,20 +915,24 @@ let isReturn = 1, isTerminator = 1, isBarrier = 1 in {
907
915
def BX_RET : AI<(outs), (ins), BrMiscFrm, IIC_Br,
908
916
"bx", "\tlr", [(ARMretflag)]>,
909
917
Requires<[IsARM, HasV4T]> {
918
+ bits<4> Cond;
910
919
let Inst{3-0} = 0b1110;
911
920
let Inst{7-4} = 0b0001;
912
921
let Inst{19-8} = 0b111111111111;
913
922
let Inst{27-20} = 0b00010010;
923
+ let Inst{31-28} = Cond;
914
924
}
915
925
916
926
// ARMV4 only
917
927
def MOVPCLR : AI<(outs), (ins), BrMiscFrm, IIC_Br,
918
928
"mov", "\tpc, lr", [(ARMretflag)]>,
919
929
Requires<[IsARM, NoV4T]> {
930
+ bits<4> Cond;
920
931
let Inst{11-0} = 0b000000001110;
921
932
let Inst{15-12} = 0b1111;
922
933
let Inst{19-16} = 0b0000;
923
934
let Inst{27-20} = 0b00011010;
935
+ let Inst{31-28} = Cond;
924
936
}
925
937
}
926
938
@@ -930,21 +942,27 @@ let isBranch = 1, isTerminator = 1, isBarrier = 1, isIndirectBranch = 1 in {
930
942
def BRIND : AXI<(outs), (ins GPR:$dst), BrMiscFrm, IIC_Br, "bx\t$dst",
931
943
[(brind GPR:$dst)]>,
932
944
Requires<[IsARM, HasV4T]> {
945
+ bits<4> Rm;
946
+
933
947
let Inst{7-4} = 0b0001;
934
948
let Inst{19-8} = 0b111111111111;
935
949
let Inst{27-20} = 0b00010010;
936
950
let Inst{31-28} = 0b1110;
951
+ let Inst{3-0} = Rm;
937
952
}
938
953
939
954
// ARMV4 only
940
955
def MOVPCRX : AXI<(outs), (ins GPR:$dst), BrMiscFrm, IIC_Br, "mov\tpc, $dst",
941
956
[(brind GPR:$dst)]>,
942
957
Requires<[IsARM, NoV4T]> {
958
+ bits<4> Rm;
959
+
943
960
let Inst{11-4} = 0b00000000;
944
961
let Inst{15-12} = 0b1111;
945
962
let Inst{19-16} = 0b0000;
946
963
let Inst{27-20} = 0b00011010;
947
964
let Inst{31-28} = 0b1110;
965
+ let Inst{3-0} = Rm;
948
966
}
949
967
}
950
968
@@ -981,9 +999,11 @@ let isCall = 1,
981
999
IIC_Br, "blx\t$func",
982
1000
[(ARMcall GPR:$func)]>,
983
1001
Requires<[IsARM, HasV5T, IsNotDarwin]> {
1002
+ bits<4> Rm;
984
1003
let Inst{7-4} = 0b0011;
985
1004
let Inst{19-8} = 0b111111111111;
986
1005
let Inst{27-20} = 0b00010010;
1006
+ let Inst{3-0} = Rm;
987
1007
}
988
1008
989
1009
// ARMv4T
@@ -1493,16 +1513,26 @@ def STM_UPD : AXI4st<(outs GPR:$wb), (ins addrmode4:$addr, pred:$p,
1493
1513
let neverHasSideEffects = 1 in
1494
1514
def MOVr : AsI1<0b1101, (outs GPR:$dst), (ins GPR:$src), DPFrm, IIC_iMOVr,
1495
1515
"mov", "\t$dst, $src", []>, UnaryDP {
1516
+ bits<4> Rd;
1517
+ bits<4> Rm;
1518
+
1496
1519
let Inst{11-4} = 0b00000000;
1497
1520
let Inst{25} = 0;
1521
+ let Inst{3-0} = Rm;
1522
+ let Inst{15-12} = Rd;
1498
1523
}
1499
1524
1500
1525
// A version for the smaller set of tail call registers.
1501
1526
let neverHasSideEffects = 1 in
1502
1527
def MOVr_TC : AsI1<0b1101, (outs tcGPR:$dst), (ins tcGPR:$src), DPFrm,
1503
1528
IIC_iMOVr, "mov", "\t$dst, $src", []>, UnaryDP {
1529
+ bits<4> Rd;
1530
+ bits<4> Rm;
1531
+
1504
1532
let Inst{11-4} = 0b00000000;
1505
1533
let Inst{25} = 0;
1534
+ let Inst{3-0} = Rm;
1535
+ let Inst{15-12} = Rd;
1506
1536
}
1507
1537
1508
1538
def MOVs : AsI1<0b1101, (outs GPR:$dst), (ins so_reg:$src),
0 commit comments