@@ -1026,6 +1026,10 @@ EMITTER_OPCODE_TABLE(OPCODE_EXTRACT, EXTRACT_I8, EXTRACT_I16, EXTRACT_I32);
1026
1026
struct SPLAT_I8 : Sequence<SPLAT_I8, I<OPCODE_SPLAT, V128Op, I8Op>> {
1027
1027
static void Emit (A64Emitter& e, const EmitArgType& i) {
1028
1028
if (i.src1 .is_constant ) {
1029
+ if (i.src1 .constant () <= 0xFF ) {
1030
+ e.MOVI (i.dest .reg ().B16 (), i.src1 .constant ());
1031
+ return ;
1032
+ }
1029
1033
e.MOV (W0, i.src1 .constant ());
1030
1034
e.DUP (i.dest .reg ().B16 (), W0);
1031
1035
} else {
@@ -1036,6 +1040,10 @@ struct SPLAT_I8 : Sequence<SPLAT_I8, I<OPCODE_SPLAT, V128Op, I8Op>> {
1036
1040
struct SPLAT_I16 : Sequence<SPLAT_I16, I<OPCODE_SPLAT, V128Op, I16Op>> {
1037
1041
static void Emit (A64Emitter& e, const EmitArgType& i) {
1038
1042
if (i.src1 .is_constant ) {
1043
+ if (i.src1 .constant () <= 0xFF ) {
1044
+ e.MOVI (i.dest .reg ().H8 (), i.src1 .constant ());
1045
+ return ;
1046
+ }
1039
1047
e.MOV (W0, i.src1 .constant ());
1040
1048
e.DUP (i.dest .reg ().H8 (), W0);
1041
1049
} else {
@@ -1046,6 +1054,10 @@ struct SPLAT_I16 : Sequence<SPLAT_I16, I<OPCODE_SPLAT, V128Op, I16Op>> {
1046
1054
struct SPLAT_I32 : Sequence<SPLAT_I32, I<OPCODE_SPLAT, V128Op, I32Op>> {
1047
1055
static void Emit (A64Emitter& e, const EmitArgType& i) {
1048
1056
if (i.src1 .is_constant ) {
1057
+ if (i.src1 .constant () <= 0xFF ) {
1058
+ e.MOVI (i.dest .reg ().S4 (), i.src1 .constant ());
1059
+ return ;
1060
+ }
1049
1061
e.MOV (W0, i.src1 .constant ());
1050
1062
e.DUP (i.dest .reg ().S4 (), W0);
1051
1063
} else {
@@ -1056,6 +1068,10 @@ struct SPLAT_I32 : Sequence<SPLAT_I32, I<OPCODE_SPLAT, V128Op, I32Op>> {
1056
1068
struct SPLAT_F32 : Sequence<SPLAT_F32, I<OPCODE_SPLAT, V128Op, F32Op>> {
1057
1069
static void Emit (A64Emitter& e, const EmitArgType& i) {
1058
1070
if (i.src1 .is_constant ) {
1071
+ if (i.src1 .value ->constant .i32 <= 0xFF ) {
1072
+ e.MOVI (i.dest .reg ().S4 (), i.src1 .value ->constant .i32 );
1073
+ return ;
1074
+ }
1059
1075
e.MOV (W0, i.src1 .value ->constant .i32 );
1060
1076
e.DUP (i.dest .reg ().S4 (), W0);
1061
1077
} else {
0 commit comments