1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

[PowerPC] Support extended mnemonics mffprwz etc.

Summary:
Reported in https://github.com/opencv/opencv/issues/15413.

We have serveral extended mnemonics for Move To/From Vector-Scalar Register Instructions
eg: mffprd,mtfprd etc.

We only support one of them, this patch add the others.

Reviewers: nemanjai, steven.zhang, hfinkel, #powerpc

Reviewed By: hfinkel

Subscribers: wuzish, qcolombet, hiraditya, kbarton, MaskRay, shchenz, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D66963

llvm-svn: 370411
This commit is contained in:
Jinsong Ji 2019-08-29 21:53:59 +00:00
parent 6017c1a2f3
commit c7cbe2ad6b
22 changed files with 276 additions and 109 deletions

View File

@ -125,8 +125,8 @@ def : InstRW<[P9_ALU_2C, IP_EXEC_1C, DISP_1C],
(instregex "SRAD(I)?$"),
(instregex "EXTSWSLI_32_64$"),
(instregex "MFV(S)?RD$"),
(instregex "MTVSRD$"),
(instregex "MTVSRW(A|Z)$"),
(instregex "MTV(S)?RD$"),
(instregex "MTV(S)?RW(A|Z)$"),
(instregex "CMP(WI|LWI|W|LW)(8)?$"),
(instregex "CMP(L)?D(I)?$"),
(instregex "SUBF(I)?C(8)?$"),
@ -159,6 +159,7 @@ def : InstRW<[P9_ALU_2C, IP_EXEC_1C, DISP_1C],
XSNEGDP,
XSCPSGNDP,
MFVSRWZ,
MFVRWZ,
EXTSWSLI,
SRADI_32,
RLDIC,

View File

@ -1593,16 +1593,33 @@ let Predicates = [HasDirectMove] in {
def MFVSRWZ : XX1_RS6_RD5_XO<31, 115, (outs gprc:$rA), (ins vsfrc:$XT),
"mfvsrwz $rA, $XT", IIC_VecGeneral,
[(set i32:$rA, (PPCmfvsr f64:$XT))]>;
let isCodeGenOnly = 1 in
def MFVRWZ : XX1_RS6_RD5_XO<31, 115, (outs gprc:$rA), (ins vsrc:$XT),
"mfvsrwz $rA, $XT", IIC_VecGeneral,
[]>;
def MTVSRD : XX1_RS6_RD5_XO<31, 179, (outs vsfrc:$XT), (ins g8rc:$rA),
"mtvsrd $XT, $rA", IIC_VecGeneral,
[(set f64:$XT, (PPCmtvsra i64:$rA))]>,
Requires<[In64BitMode]>;
let isCodeGenOnly = 1 in
def MTVRD : XX1_RS6_RD5_XO<31, 179, (outs vsrc:$XT), (ins g8rc:$rA),
"mtvsrd $XT, $rA", IIC_VecGeneral,
[]>,
Requires<[In64BitMode]>;
def MTVSRWA : XX1_RS6_RD5_XO<31, 211, (outs vsfrc:$XT), (ins gprc:$rA),
"mtvsrwa $XT, $rA", IIC_VecGeneral,
[(set f64:$XT, (PPCmtvsra i32:$rA))]>;
let isCodeGenOnly = 1 in
def MTVRWA : XX1_RS6_RD5_XO<31, 211, (outs vsrc:$XT), (ins gprc:$rA),
"mtvsrwa $XT, $rA", IIC_VecGeneral,
[]>;
def MTVSRWZ : XX1_RS6_RD5_XO<31, 243, (outs vsfrc:$XT), (ins gprc:$rA),
"mtvsrwz $XT, $rA", IIC_VecGeneral,
[(set f64:$XT, (PPCmtvsrz i32:$rA))]>;
let isCodeGenOnly = 1 in
def MTVRWZ : XX1_RS6_RD5_XO<31, 243, (outs vsrc:$XT), (ins gprc:$rA),
"mtvsrwz $XT, $rA", IIC_VecGeneral,
[]>;
} // HasDirectMove
let Predicates = [IsISA3_0, HasDirectMove] in {
@ -1626,6 +1643,22 @@ def : InstAlias<"mfvrd $rA, $XT",
(MFVRD g8rc:$rA, vrrc:$XT), 0>;
def : InstAlias<"mffprd $rA, $src",
(MFVSRD g8rc:$rA, f8rc:$src)>;
def : InstAlias<"mtvrd $XT, $rA",
(MTVRD vrrc:$XT, g8rc:$rA), 0>;
def : InstAlias<"mtfprd $dst, $rA",
(MTVSRD f8rc:$dst, g8rc:$rA)>;
def : InstAlias<"mfvrwz $rA, $XT",
(MFVRWZ gprc:$rA, vrrc:$XT), 0>;
def : InstAlias<"mffprwz $rA, $src",
(MFVSRWZ gprc:$rA, f8rc:$src)>;
def : InstAlias<"mtvrwa $XT, $rA",
(MTVRWA vrrc:$XT, gprc:$rA), 0>;
def : InstAlias<"mtfprwa $dst, $rA",
(MTVSRWA f8rc:$dst, gprc:$rA)>;
def : InstAlias<"mtvrwz $XT, $rA",
(MTVRWZ vrrc:$XT, gprc:$rA), 0>;
def : InstAlias<"mtfprwz $dst, $rA",
(MTVSRWZ f8rc:$dst, gprc:$rA)>;
/* Direct moves of various widths from GPR's into VSR's. Each move lines
the value up into element 0 (both BE and LE). Namely, entities smaller than

View File

@ -40,7 +40,7 @@ entry:
ret double %0
; CHECK-P7: std 3,
; CHECK-P7: lfd 1,
; CHECK: mtvsrd 1, 3
; CHECK: mtfprd 1, 3
}
define zeroext i32 @f32toi32u(float %a) {
@ -80,5 +80,5 @@ entry:
ret double %0
; CHECK-P7: std 3,
; CHECK-P7: lfd 1,
; CHECK: mtvsrd 1, 3
; CHECK: mtfprd 1, 3
}

View File

@ -112,7 +112,7 @@ entry:
%2 = call fp128 @llvm.ppc.scalar.insert.exp.qp(fp128 %0, i64 %1)
ret fp128 %2
; CHECK-LABEL: insert_exp_qp
; CHECK-DAG: mtvsrd [[FPREG:f[0-9]+]], r3
; CHECK-DAG: mtfprd [[FPREG:f[0-9]+]], r3
; CHECK-DAG: lxvx [[VECREG:v[0-9]+]]
; CHECK: xsiexpqp v2, [[VECREG]], [[FPREG]]
; CHECK: blr

View File

@ -69,7 +69,7 @@ entry:
store i32 %add, i32* %arrayidx6, align 4, !tbaa !1
ret void
; CHECK: mtvsrwa
; CHECK: mtfprwa
; CHECK: blr
}

View File

@ -25,7 +25,7 @@ entry:
define float @_Z6testfcc(i8 zeroext %arg) {
; CHECK-LABEL: _Z6testfcc:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mtvsrwz f0, r3
; CHECK-NEXT: mtfprwz f0, r3
; CHECK-NEXT: stb r3, -1(r1)
; CHECK-NEXT: xscvuxdsp f1, f0
; CHECK-NEXT: blr
@ -58,7 +58,7 @@ entry:
define double @_Z6testdcc(i8 zeroext %arg) {
; CHECK-LABEL: _Z6testdcc:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mtvsrwz f0, r3
; CHECK-NEXT: mtfprwz f0, r3
; CHECK-NEXT: stb r3, -1(r1)
; CHECK-NEXT: xscvuxddp f1, f0
; CHECK-NEXT: blr
@ -91,7 +91,7 @@ entry:
define float @_Z7testfuch(i8 zeroext %arg) {
; CHECK-LABEL: _Z7testfuch:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mtvsrwz f0, r3
; CHECK-NEXT: mtfprwz f0, r3
; CHECK-NEXT: stb r3, -1(r1)
; CHECK-NEXT: xscvuxdsp f1, f0
; CHECK-NEXT: blr
@ -124,7 +124,7 @@ entry:
define double @_Z7testduch(i8 zeroext %arg) {
; CHECK-LABEL: _Z7testduch:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mtvsrwz f0, r3
; CHECK-NEXT: mtfprwz f0, r3
; CHECK-NEXT: stb r3, -1(r1)
; CHECK-NEXT: xscvuxddp f1, f0
; CHECK-NEXT: blr
@ -142,7 +142,7 @@ define signext i16 @_Z6testsff(float %arg) {
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xscvdpsxws f0, f1
; CHECK-NEXT: stfs f1, -4(r1)
; CHECK-NEXT: mfvsrwz r3, f0
; CHECK-NEXT: mffprwz r3, f0
; CHECK-NEXT: extsw r3, r3
; CHECK-NEXT: blr
entry:
@ -157,7 +157,7 @@ entry:
define float @_Z6testfss(i16 signext %arg) {
; CHECK-LABEL: _Z6testfss:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mtvsrwa f0, r3
; CHECK-NEXT: mtfprwa f0, r3
; CHECK-NEXT: sth r3, -2(r1)
; CHECK-NEXT: xscvsxdsp f1, f0
; CHECK-NEXT: blr
@ -175,7 +175,7 @@ define signext i16 @_Z6testsdd(double %arg) {
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xscvdpsxws f0, f1
; CHECK-NEXT: stfd f1, -8(r1)
; CHECK-NEXT: mfvsrwz r3, f0
; CHECK-NEXT: mffprwz r3, f0
; CHECK-NEXT: extsw r3, r3
; CHECK-NEXT: blr
entry:
@ -190,7 +190,7 @@ entry:
define double @_Z6testdss(i16 signext %arg) {
; CHECK-LABEL: _Z6testdss:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mtvsrwa f0, r3
; CHECK-NEXT: mtfprwa f0, r3
; CHECK-NEXT: sth r3, -2(r1)
; CHECK-NEXT: xscvsxddp f1, f0
; CHECK-NEXT: blr
@ -223,7 +223,7 @@ entry:
define float @_Z7testfust(i16 zeroext %arg) {
; CHECK-LABEL: _Z7testfust:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mtvsrwz f0, r3
; CHECK-NEXT: mtfprwz f0, r3
; CHECK-NEXT: sth r3, -2(r1)
; CHECK-NEXT: xscvuxdsp f1, f0
; CHECK-NEXT: blr
@ -256,7 +256,7 @@ entry:
define double @_Z7testdust(i16 zeroext %arg) {
; CHECK-LABEL: _Z7testdust:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mtvsrwz f0, r3
; CHECK-NEXT: mtfprwz f0, r3
; CHECK-NEXT: sth r3, -2(r1)
; CHECK-NEXT: xscvuxddp f1, f0
; CHECK-NEXT: blr
@ -274,7 +274,7 @@ define signext i32 @_Z6testiff(float %arg) {
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xscvdpsxws f0, f1
; CHECK-NEXT: stfs f1, -4(r1)
; CHECK-NEXT: mfvsrwz r3, f0
; CHECK-NEXT: mffprwz r3, f0
; CHECK-NEXT: extsw r3, r3
; CHECK-NEXT: blr
entry:
@ -289,7 +289,7 @@ entry:
define float @_Z6testfii(i32 signext %arg) {
; CHECK-LABEL: _Z6testfii:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mtvsrwa f0, r3
; CHECK-NEXT: mtfprwa f0, r3
; CHECK-NEXT: stw r3, -4(r1)
; CHECK-NEXT: xscvsxdsp f1, f0
; CHECK-NEXT: blr
@ -307,7 +307,7 @@ define signext i32 @_Z6testidd(double %arg) {
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xscvdpsxws f0, f1
; CHECK-NEXT: stfd f1, -8(r1)
; CHECK-NEXT: mfvsrwz r3, f0
; CHECK-NEXT: mffprwz r3, f0
; CHECK-NEXT: extsw r3, r3
; CHECK-NEXT: blr
entry:
@ -322,7 +322,7 @@ entry:
define double @_Z6testdii(i32 signext %arg) {
; CHECK-LABEL: _Z6testdii:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mtvsrwa f0, r3
; CHECK-NEXT: mtfprwa f0, r3
; CHECK-NEXT: stw r3, -4(r1)
; CHECK-NEXT: xscvsxddp f1, f0
; CHECK-NEXT: blr
@ -355,7 +355,7 @@ entry:
define float @_Z7testfuij(i32 zeroext %arg) {
; CHECK-LABEL: _Z7testfuij:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mtvsrwz f0, r3
; CHECK-NEXT: mtfprwz f0, r3
; CHECK-NEXT: stw r3, -4(r1)
; CHECK-NEXT: xscvuxdsp f1, f0
; CHECK-NEXT: blr
@ -388,7 +388,7 @@ entry:
define double @_Z7testduij(i32 zeroext %arg) {
; CHECK-LABEL: _Z7testduij:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mtvsrwz f0, r3
; CHECK-NEXT: mtfprwz f0, r3
; CHECK-NEXT: stw r3, -4(r1)
; CHECK-NEXT: xscvuxddp f1, f0
; CHECK-NEXT: blr
@ -420,7 +420,7 @@ entry:
define float @_Z7testfllx(i64 %arg) {
; CHECK-LABEL: _Z7testfllx:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mtvsrd f0, r3
; CHECK-NEXT: mtfprd f0, r3
; CHECK-NEXT: std r3, -8(r1)
; CHECK-NEXT: xscvsxdsp f1, f0
; CHECK-NEXT: blr
@ -452,7 +452,7 @@ entry:
define double @_Z7testdllx(i64 %arg) {
; CHECK-LABEL: _Z7testdllx:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mtvsrd f0, r3
; CHECK-NEXT: mtfprd f0, r3
; CHECK-NEXT: std r3, -8(r1)
; CHECK-NEXT: xscvsxddp f1, f0
; CHECK-NEXT: blr
@ -484,7 +484,7 @@ entry:
define float @_Z8testfully(i64 %arg) {
; CHECK-LABEL: _Z8testfully:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mtvsrd f0, r3
; CHECK-NEXT: mtfprd f0, r3
; CHECK-NEXT: std r3, -8(r1)
; CHECK-NEXT: xscvuxdsp f1, f0
; CHECK-NEXT: blr
@ -516,7 +516,7 @@ entry:
define double @_Z8testdully(i64 %arg) {
; CHECK-LABEL: _Z8testdully:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: mtvsrd f0, r3
; CHECK-NEXT: mtfprd f0, r3
; CHECK-NEXT: std r3, -8(r1)
; CHECK-NEXT: xscvuxddp f1, f0
; CHECK-NEXT: blr

View File

@ -6,7 +6,7 @@ define i1 @Test(double %a) {
; CHECK-LABEL: Test:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: xscvdpsxws 0, 1
; CHECK-NEXT: mfvsrwz 3, 0
; CHECK-NEXT: mffprwz 3, 0
; CHECK-NEXT: xori 3, 3, 65534
; CHECK-NEXT: cntlzw 3, 3
; CHECK-NEXT: srwi 3, 3, 5

View File

@ -17,7 +17,7 @@ if.end: ; preds = %if.then, %entry
; CHECK: @foo
; CHECK: mr [[NEWREG:[0-9]+]], 3
; CHECK: mr [[REG1:[0-9]+]], 4
; CHECK: mtvsrd [[NEWREG2:[0-9]+]], 4
; CHECK: mtfprd [[NEWREG2:[0-9]+]], 4
; CHECK: add {{[0-9]+}}, [[NEWREG]], [[REG1]]
; CHECK: mffprd [[REG2:[0-9]+]], [[NEWREG2]]
; CHECK: add {{[0-9]+}}, [[REG2]], [[NEWREG]]

View File

@ -0,0 +1,72 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names \
; RUN: -mcpu=pwr9 -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s
define dso_local void @foo() {
; CHECK-LABEL: foo:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: #APP
; CHECK-NEXT: mfvsrd r0, vs33
; CHECK-NEXT: #NO_APP
; CHECK-NEXT: #APP
; CHECK-NEXT: mffprd r0, f3
; CHECK-NEXT: #NO_APP
; CHECK-NEXT: #APP
; CHECK-NEXT: mfvsrd r0, vs34
; CHECK-NEXT: #NO_APP
; CHECK-NEXT: #APP
; CHECK-NEXT: mfvsrwz r0, vs33
; CHECK-NEXT: #NO_APP
; CHECK-NEXT: #APP
; CHECK-NEXT: mffprwz r0, f3
; CHECK-NEXT: #NO_APP
; CHECK-NEXT: #APP
; CHECK-NEXT: mfvsrwz r0, vs34
; CHECK-NEXT: #NO_APP
; CHECK-NEXT: #APP
; CHECK-NEXT: mtvsrd vs33, r0
; CHECK-NEXT: #NO_APP
; CHECK-NEXT: #APP
; CHECK-NEXT: mtfprd f3, r0
; CHECK-NEXT: #NO_APP
; CHECK-NEXT: #APP
; CHECK-NEXT: mtvsrd vs34, r0
; CHECK-NEXT: #NO_APP
; CHECK-NEXT: #APP
; CHECK-NEXT: mtvsrwa vs33, r0
; CHECK-NEXT: #NO_APP
; CHECK-NEXT: #APP
; CHECK-NEXT: mtfprwa f3, r0
; CHECK-NEXT: #NO_APP
; CHECK-NEXT: #APP
; CHECK-NEXT: mtvsrwa vs34, r0
; CHECK-NEXT: #NO_APP
; CHECK-NEXT: #APP
; CHECK-NEXT: mtvsrwz vs33, r0
; CHECK-NEXT: #NO_APP
; CHECK-NEXT: #APP
; CHECK-NEXT: mtfprwz f3, r0
; CHECK-NEXT: #NO_APP
; CHECK-NEXT: #APP
; CHECK-NEXT: mtvsrwz vs34, r0
; CHECK-NEXT: #NO_APP
; CHECK-NEXT: blr
entry:
call void asm sideeffect "mfvsrd 0,33", ""()
call void asm sideeffect "mffprd 0,3", ""()
call void asm sideeffect "mfvrd 0,2", ""()
call void asm sideeffect "mfvsrwz 0,33", ""()
call void asm sideeffect "mffprwz 0,3", ""()
call void asm sideeffect "mfvrwz 0,2", ""()
call void asm sideeffect "mtvsrd 33,0", ""()
call void asm sideeffect "mtfprd 3,0", ""()
call void asm sideeffect "mtvrd 2,0", ""()
call void asm sideeffect "mtvsrwa 33,0", ""()
call void asm sideeffect "mtfprwa 3,0", ""()
call void asm sideeffect "mtvrwa 2,0", ""()
call void asm sideeffect "mtvsrwz 33,0", ""()
call void asm sideeffect "mtfprwz 3,0", ""()
call void asm sideeffect "mtvrwz 2,0", ""()
ret void
}

View File

@ -45,8 +45,8 @@ define ppc_fp128 @test(%struct.S* byval %x) nounwind {
;
; CHECK-P9-LABEL: test:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: mtvsrd 1, 5
; CHECK-P9-NEXT: mtvsrd 2, 6
; CHECK-P9-NEXT: mtfprd 1, 5
; CHECK-P9-NEXT: mtfprd 2, 6
; CHECK-P9-NEXT: std 6, 72(1)
; CHECK-P9-NEXT: std 5, 64(1)
; CHECK-P9-NEXT: std 3, 48(1)

View File

@ -11,7 +11,7 @@ define i32 @bad(double %x) {
; CHECK: stfd [[REG0]], [[OFF:.*]](1)
; CHECK: lwz {{[0-9]*}}, [[OFF]](1)
; GENERIC: xscvdpuxws [[REG0:[0-9]+]], 1
; GENERIC: mfvsrwz {{[0-9]*}}, [[REG0]]
; GENERIC: mffprwz {{[0-9]*}}, [[REG0]]
}
define i32 @bad1(float %x) {
@ -23,5 +23,5 @@ entry:
; CHECK: stfd [[REG0]], [[OFF:.*]](1)
; CHECK: lwa {{[0-9]*}}, [[OFF]](1)
; GENERIC: xscvdpsxws [[REG0:[0-9]+]], 1
; GENERIC: mfvsrwz {{[0-9]*}}, [[REG0]]
; GENERIC: mffprwz {{[0-9]*}}, [[REG0]]
}

View File

@ -10,7 +10,7 @@ entry:
ret void
; CHECK-LABEL: @foo1
; CHECK: mtvsrwz
; CHECK: mtfprwz
}
define void @foo2(i16* %p) {
@ -21,6 +21,6 @@ entry:
ret void
; CHECK-LABEL: @foo2
; CHECK: mtvsrwz
; CHECK: mtfprwz
}

View File

@ -23,7 +23,7 @@ define float @testMultipleAccess(i32* nocapture readonly %arr) local_unnamed_add
; CHECK-NEXT: lwz 4, 8(3)
; CHECK-NEXT: lwz 3, 12(3)
; CHECK-NEXT: add 3, 3, 4
; CHECK-NEXT: mtvsrwa 0, 3
; CHECK-NEXT: mtfprwa 0, 3
; CHECK-NEXT: xscvsxdsp 1, 0
; CHECK-NEXT: blr
entry:

View File

@ -26,7 +26,7 @@ entry:
; CHECK-DAG: mffs 1
; CHECK-DAG: mffprd [[REG1:[0-9]+]], 1
; CHECK-DAG: rldimi [[REG1]], 3, 0, 62
; CHECK-DAG: mtvsrd [[REG2:[0-9]+]], [[REG1]]
; CHECK-DAG: mtfprd [[REG2:[0-9]+]], [[REG1]]
; CHECK-DAG: mtfsf 255, [[REG2]]
; CHECK: blr

View File

@ -66,7 +66,7 @@ entry:
; CHECK-PWR8-LABEL: dpConv2shw
; CHECK-PWR8: lfdx [[LD:[0-9]+]], 0, 3
; CHECK-PWR8-NEXT: xscvdpsxws [[CONV:[0-9]+]], [[LD]]
; CHECK-PWR8-NEXT: mfvsrwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: mffprwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: sth [[REG]], 0(4)
; CHECK-PWR8-NEXT: blr
}
@ -88,7 +88,7 @@ entry:
; CHECK-PWR8-LABEL: dpConv2sb
; CHECK-PWR8: lfdx [[LD:[0-9]+]], 0, 3
; CHECK-PWR8-NEXT: xscvdpsxws [[CONV:[0-9]+]], [[LD]]
; CHECK-PWR8-NEXT: mfvsrwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: mffprwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: stb [[REG]], 0(4)
; CHECK-PWR8-NEXT: blr
}
@ -152,7 +152,7 @@ entry:
; CHECK-PWR8-LABEL: spConv2shw
; CHECK-PWR8: lfsx [[LD:[0-9]+]], 0, 3
; CHECK-PWR8-NEXT: xscvdpsxws [[CONV:[0-9]+]], [[LD]]
; CHECK-PWR8-NEXT: mfvsrwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: mffprwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: sth [[REG]], 0(4)
; CHECK-PWR8-NEXT: blr
}
@ -174,7 +174,7 @@ entry:
; CHECK-PWR8-LABEL: spConv2sb
; CHECK-PWR8: lfsx [[LD:[0-9]+]], 0, 3
; CHECK-PWR8-NEXT: xscvdpsxws [[CONV:[0-9]+]], [[LD]]
; CHECK-PWR8-NEXT: mfvsrwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: mffprwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: stb [[REG]], 0(4)
; CHECK-PWR8-NEXT: blr
}
@ -253,7 +253,7 @@ entry:
; CHECK-PWR8: lfdx [[LD:[0-9]+]], 0, 3
; CHECK-PWR8-NEXT: sldi [[REG:[0-9]+]], 5, 1
; CHECK-PWR8-NEXT: xscvdpsxws [[CONV:[0-9]+]], [[LD]]
; CHECK-PWR8-NEXT: mfvsrwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: mffprwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: sthx [[REG]], 4, 5
; CHECK-PWR8-NEXT: blr
}
@ -278,7 +278,7 @@ entry:
; CHECK-PWR8-LABEL: dpConv2sb_x
; CHECK-PWR8: lfdx [[LD:[0-9]+]], 0, 3
; CHECK-PWR8-NEXT: xscvdpsxws [[CONV:[0-9]+]], [[LD]]
; CHECK-PWR8-NEXT: mfvsrwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: mffprwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: stbx [[REG]], 4, 5
; CHECK-PWR8-NEXT: blr
}
@ -357,7 +357,7 @@ entry:
; CHECK-PWR8: lfsx [[LD:[0-9]+]], 0, 3
; CHECK-PWR8-NEXT: sldi [[REG:[0-9]+]], 5, 1
; CHECK-PWR8-NEXT: xscvdpsxws [[CONV:[0-9]+]], [[LD]]
; CHECK-PWR8-NEXT: mfvsrwz [[REG2:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: mffprwz [[REG2:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: sthx [[REG2]], 4, [[REG]]
; CHECK-PWR8-NEXT: blr
}
@ -382,7 +382,7 @@ entry:
; CHECK-PWR8-LABEL: spConv2sb_x
; CHECK-PWR8: lfsx [[LD:[0-9]+]], 0, 3
; CHECK-PWR8-NEXT: xscvdpsxws [[CONV:[0-9]+]], [[LD]]
; CHECK-PWR8-NEXT: mfvsrwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: mffprwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: stbx [[REG]], 4, 5
; CHECK-PWR8-NEXT: blr
}
@ -450,7 +450,7 @@ entry:
; CHECK-PWR8-LABEL: dpConv2uhw
; CHECK-PWR8: lfdx [[LD:[0-9]+]], 0, 3
; CHECK-PWR8-NEXT: xscvdpsxws [[CONV:[0-9]+]], [[LD]]
; CHECK-PWR8-NEXT: mfvsrwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: mffprwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: sth [[REG]], 0(4)
; CHECK-PWR8-NEXT: blr
}
@ -472,7 +472,7 @@ entry:
; CHECK-PWR8-LABEL: dpConv2ub
; CHECK-PWR8: lfdx [[LD:[0-9]+]], 0, 3
; CHECK-PWR8-NEXT: xscvdpsxws [[CONV:[0-9]+]], [[LD]]
; CHECK-PWR8-NEXT: mfvsrwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: mffprwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: stb [[REG]], 0(4)
; CHECK-PWR8-NEXT: blr
}
@ -536,7 +536,7 @@ entry:
; CHECK-PWR8-LABEL: spConv2uhw
; CHECK-PWR8: lfsx [[LD:[0-9]+]], 0, 3
; CHECK-PWR8-NEXT: xscvdpsxws [[CONV:[0-9]+]], [[LD]]
; CHECK-PWR8-NEXT: mfvsrwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: mffprwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: sth [[REG]], 0(4)
; CHECK-PWR8-NEXT: blr
}
@ -558,7 +558,7 @@ entry:
; CHECK-PWR8-LABEL: spConv2ub
; CHECK-PWR8: lfsx [[LD:[0-9]+]], 0, 3
; CHECK-PWR8-NEXT: xscvdpsxws [[CONV:[0-9]+]], [[LD]]
; CHECK-PWR8-NEXT: mfvsrwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: mffprwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: stb [[REG]], 0(4)
; CHECK-PWR8-NEXT: blr
}
@ -637,7 +637,7 @@ entry:
; CHECK-PWR8: lfdx [[LD:[0-9]+]], 0, 3
; CHECK-PWR8-NEXT: sldi [[REG:[0-9]+]], 5, 1
; CHECK-PWR8-NEXT: xscvdpsxws [[CONV:[0-9]+]], [[LD]]
; CHECK-PWR8-NEXT: mfvsrwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: mffprwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: sthx [[REG]], 4, 5
; CHECK-PWR8-NEXT: blr
}
@ -662,7 +662,7 @@ entry:
; CHECK-PWR8-LABEL: dpConv2ub_x
; CHECK-PWR8: lfdx [[LD:[0-9]+]], 0, 3
; CHECK-PWR8-NEXT: xscvdpsxws [[CONV:[0-9]+]], [[LD]]
; CHECK-PWR8-NEXT: mfvsrwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: mffprwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: stbx [[REG]], 4, 5
; CHECK-PWR8-NEXT: blr
}
@ -741,7 +741,7 @@ entry:
; CHECK-PWR8: lfsx [[LD:[0-9]+]], 0, 3
; CHECK-PWR8-NEXT: sldi [[REG:[0-9]+]], 5, 1
; CHECK-PWR8-NEXT: xscvdpsxws [[CONV:[0-9]+]], [[LD]]
; CHECK-PWR8-NEXT: mfvsrwz [[REG2:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: mffprwz [[REG2:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: sthx [[REG2]], 4, [[REG]]
; CHECK-PWR8-NEXT: blr
}
@ -766,7 +766,7 @@ entry:
; CHECK-PWR8-LABEL: spConv2ub_x
; CHECK-PWR8: lfsx [[LD:[0-9]+]], 0, 3
; CHECK-PWR8-NEXT: xscvdpsxws [[CONV:[0-9]+]], [[LD]]
; CHECK-PWR8-NEXT: mfvsrwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: mffprwz [[REG:[0-9]+]], [[CONV]]
; CHECK-PWR8-NEXT: stbx [[REG]], 4, 5
; CHECK-PWR8-NEXT: blr
}

View File

@ -17,11 +17,11 @@ define dso_local <2 x double> @test1(<8 x i16> %a) {
; P9BE-NEXT: li r3, 0
; P9BE-NEXT: vextuhlx r3, r3, v2
; P9BE-NEXT: rlwinm r3, r3, 0, 16, 31
; P9BE-NEXT: mtvsrwz f0, r3
; P9BE-NEXT: mtfprwz f0, r3
; P9BE-NEXT: li r3, 2
; P9BE-NEXT: vextuhlx r3, r3, v2
; P9BE-NEXT: rlwinm r3, r3, 0, 16, 31
; P9BE-NEXT: mtvsrwz f1, r3
; P9BE-NEXT: mtfprwz f1, r3
; P9BE-NEXT: xscvuxddp f0, f0
; P9BE-NEXT: xscvuxddp f1, f1
; P9BE-NEXT: xxmrghd v2, vs0, vs1
@ -32,11 +32,11 @@ define dso_local <2 x double> @test1(<8 x i16> %a) {
; P9LE-NEXT: li r3, 0
; P9LE-NEXT: vextuhrx r3, r3, v2
; P9LE-NEXT: rlwinm r3, r3, 0, 16, 31
; P9LE-NEXT: mtvsrwz f0, r3
; P9LE-NEXT: mtfprwz f0, r3
; P9LE-NEXT: li r3, 2
; P9LE-NEXT: vextuhrx r3, r3, v2
; P9LE-NEXT: rlwinm r3, r3, 0, 16, 31
; P9LE-NEXT: mtvsrwz f1, r3
; P9LE-NEXT: mtfprwz f1, r3
; P9LE-NEXT: xscvuxddp f0, f0
; P9LE-NEXT: xscvuxddp f1, f1
; P9LE-NEXT: xxmrghd v2, vs1, vs0
@ -49,8 +49,8 @@ define dso_local <2 x double> @test1(<8 x i16> %a) {
; P8BE-NEXT: rldicl r3, r3, 32, 48
; P8BE-NEXT: rlwinm r4, r4, 0, 16, 31
; P8BE-NEXT: rlwinm r3, r3, 0, 16, 31
; P8BE-NEXT: mtvsrwz f0, r4
; P8BE-NEXT: mtvsrwz f1, r3
; P8BE-NEXT: mtfprwz f0, r4
; P8BE-NEXT: mtfprwz f1, r3
; P8BE-NEXT: xscvuxddp f0, f0
; P8BE-NEXT: xscvuxddp f1, f1
; P8BE-NEXT: xxmrghd v2, vs0, vs1
@ -64,8 +64,8 @@ define dso_local <2 x double> @test1(<8 x i16> %a) {
; P8LE-NEXT: rldicl r3, r3, 48, 48
; P8LE-NEXT: rlwinm r4, r4, 0, 16, 31
; P8LE-NEXT: rlwinm r3, r3, 0, 16, 31
; P8LE-NEXT: mtvsrwz f0, r4
; P8LE-NEXT: mtvsrwz f1, r3
; P8LE-NEXT: mtfprwz f0, r4
; P8LE-NEXT: mtfprwz f1, r3
; P8LE-NEXT: xscvuxddp f0, f0
; P8LE-NEXT: xscvuxddp f1, f1
; P8LE-NEXT: xxmrghd v2, vs1, vs0
@ -103,10 +103,10 @@ define dso_local <2 x double> @test2(<4 x i32> %a, <4 x i32> %b) {
; P8BE: # %bb.0: # %entry
; P8BE-NEXT: xxsldwi vs0, v2, v2, 3
; P8BE-NEXT: mfvsrwz r4, v3
; P8BE-NEXT: mtvsrwz f1, r4
; P8BE-NEXT: mtfprwz f1, r4
; P8BE-NEXT: mfvsrwz r3, f0
; P8BE-NEXT: xscvuxddp f1, f1
; P8BE-NEXT: mtvsrwz f0, r3
; P8BE-NEXT: mtfprwz f0, r3
; P8BE-NEXT: xscvuxddp f0, f0
; P8BE-NEXT: xxmrghd v2, vs0, vs1
; P8BE-NEXT: blr
@ -117,8 +117,8 @@ define dso_local <2 x double> @test2(<4 x i32> %a, <4 x i32> %b) {
; P8LE-NEXT: xxsldwi vs1, v3, v3, 1
; P8LE-NEXT: mfvsrwz r3, f0
; P8LE-NEXT: mfvsrwz r4, f1
; P8LE-NEXT: mtvsrwz f0, r3
; P8LE-NEXT: mtvsrwz f1, r4
; P8LE-NEXT: mtfprwz f0, r3
; P8LE-NEXT: mtfprwz f1, r4
; P8LE-NEXT: xscvuxddp f0, f0
; P8LE-NEXT: xscvuxddp f1, f1
; P8LE-NEXT: xxmrghd v2, vs1, vs0

View File

@ -9,7 +9,7 @@ entry:
%conv = uitofp i16 %0 to ppc_fp128
ret ppc_fp128 %conv
; CHECK: lhz [[LD:[0-9]+]], 0(3)
; CHECK: mtvsrwa [[MV:[0-9]+]], [[LD]]
; CHECK: mtfprwa [[MV:[0-9]+]], [[LD]]
; CHECK: xscvsxddp [[CONV:[0-9]+]], [[MV]]
; CHECK: bl __gcc_qadd
}

View File

@ -29,11 +29,11 @@ define i64 @test2elt(<2 x double> %a) local_unnamed_addr #0 {
; CHECK-P9-LABEL: test2elt:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: xscvdpuxws f0, v2
; CHECK-P9-NEXT: mfvsrwz r3, f0
; CHECK-P9-NEXT: mffprwz r3, f0
; CHECK-P9-NEXT: xxswapd vs0, v2
; CHECK-P9-NEXT: mtvsrws v3, r3
; CHECK-P9-NEXT: xscvdpuxws f0, f0
; CHECK-P9-NEXT: mfvsrwz r3, f0
; CHECK-P9-NEXT: mffprwz r3, f0
; CHECK-P9-NEXT: mtvsrws v2, r3
; CHECK-P9-NEXT: vmrglw v2, v3, v2
; CHECK-P9-NEXT: mfvsrld r3, v2
@ -42,11 +42,11 @@ define i64 @test2elt(<2 x double> %a) local_unnamed_addr #0 {
; CHECK-BE-LABEL: test2elt:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: xscvdpuxws f0, v2
; CHECK-BE-NEXT: mfvsrwz r3, f0
; CHECK-BE-NEXT: mffprwz r3, f0
; CHECK-BE-NEXT: xxswapd vs0, v2
; CHECK-BE-NEXT: mtvsrws v3, r3
; CHECK-BE-NEXT: xscvdpuxws f0, f0
; CHECK-BE-NEXT: mfvsrwz r3, f0
; CHECK-BE-NEXT: mffprwz r3, f0
; CHECK-BE-NEXT: mtvsrws v2, r3
; CHECK-BE-NEXT: vmrghw v2, v3, v2
; CHECK-BE-NEXT: mfvsrd r3, v2
@ -323,11 +323,11 @@ define i64 @test2elt_signed(<2 x double> %a) local_unnamed_addr #0 {
; CHECK-P9-LABEL: test2elt_signed:
; CHECK-P9: # %bb.0: # %entry
; CHECK-P9-NEXT: xscvdpsxws f0, v2
; CHECK-P9-NEXT: mfvsrwz r3, f0
; CHECK-P9-NEXT: mffprwz r3, f0
; CHECK-P9-NEXT: xxswapd vs0, v2
; CHECK-P9-NEXT: mtvsrws v3, r3
; CHECK-P9-NEXT: xscvdpsxws f0, f0
; CHECK-P9-NEXT: mfvsrwz r3, f0
; CHECK-P9-NEXT: mffprwz r3, f0
; CHECK-P9-NEXT: mtvsrws v2, r3
; CHECK-P9-NEXT: vmrglw v2, v3, v2
; CHECK-P9-NEXT: mfvsrld r3, v2
@ -336,11 +336,11 @@ define i64 @test2elt_signed(<2 x double> %a) local_unnamed_addr #0 {
; CHECK-BE-LABEL: test2elt_signed:
; CHECK-BE: # %bb.0: # %entry
; CHECK-BE-NEXT: xscvdpsxws f0, v2
; CHECK-BE-NEXT: mfvsrwz r3, f0
; CHECK-BE-NEXT: mffprwz r3, f0
; CHECK-BE-NEXT: xxswapd vs0, v2
; CHECK-BE-NEXT: mtvsrws v3, r3
; CHECK-BE-NEXT: xscvdpsxws f0, f0
; CHECK-BE-NEXT: mfvsrwz r3, f0
; CHECK-BE-NEXT: mffprwz r3, f0
; CHECK-BE-NEXT: mtvsrws v2, r3
; CHECK-BE-NEXT: vmrghw v2, v3, v2
; CHECK-BE-NEXT: mfvsrd r3, v2

View File

@ -18,8 +18,8 @@ define i64 @test2elt(i32 %a.coerce) local_unnamed_addr #0 {
; CHECK-P8-NEXT: rldicl r3, r3, 48, 48
; CHECK-P8-NEXT: rlwinm r4, r4, 0, 16, 31
; CHECK-P8-NEXT: rlwinm r3, r3, 0, 16, 31
; CHECK-P8-NEXT: mtvsrwz f0, r4
; CHECK-P8-NEXT: mtvsrwz f1, r3
; CHECK-P8-NEXT: mtfprwz f0, r4
; CHECK-P8-NEXT: mtfprwz f1, r3
; CHECK-P8-NEXT: xscvuxdsp f0, f0
; CHECK-P8-NEXT: xscvuxdsp f1, f1
; CHECK-P8-NEXT: xscvdpspn vs0, f0
@ -37,14 +37,14 @@ define i64 @test2elt(i32 %a.coerce) local_unnamed_addr #0 {
; CHECK-P9-NEXT: li r3, 0
; CHECK-P9-NEXT: vextuhrx r3, r3, v2
; CHECK-P9-NEXT: rlwinm r3, r3, 0, 16, 31
; CHECK-P9-NEXT: mtvsrwz f0, r3
; CHECK-P9-NEXT: mtfprwz f0, r3
; CHECK-P9-NEXT: li r3, 2
; CHECK-P9-NEXT: xscvuxdsp f0, f0
; CHECK-P9-NEXT: xscvdpspn vs0, f0
; CHECK-P9-NEXT: vextuhrx r3, r3, v2
; CHECK-P9-NEXT: rlwinm r3, r3, 0, 16, 31
; CHECK-P9-NEXT: xxsldwi v3, vs0, vs0, 1
; CHECK-P9-NEXT: mtvsrwz f0, r3
; CHECK-P9-NEXT: mtfprwz f0, r3
; CHECK-P9-NEXT: xscvuxdsp f0, f0
; CHECK-P9-NEXT: xscvdpspn vs0, f0
; CHECK-P9-NEXT: xxsldwi v2, vs0, vs0, 1
@ -58,13 +58,13 @@ define i64 @test2elt(i32 %a.coerce) local_unnamed_addr #0 {
; CHECK-BE-NEXT: li r3, 2
; CHECK-BE-NEXT: vextuhlx r3, r3, v2
; CHECK-BE-NEXT: rlwinm r3, r3, 0, 16, 31
; CHECK-BE-NEXT: mtvsrwz f0, r3
; CHECK-BE-NEXT: mtfprwz f0, r3
; CHECK-BE-NEXT: li r3, 0
; CHECK-BE-NEXT: xscvuxdsp f0, f0
; CHECK-BE-NEXT: vextuhlx r3, r3, v2
; CHECK-BE-NEXT: rlwinm r3, r3, 0, 16, 31
; CHECK-BE-NEXT: xscvdpspn v3, f0
; CHECK-BE-NEXT: mtvsrwz f0, r3
; CHECK-BE-NEXT: mtfprwz f0, r3
; CHECK-BE-NEXT: xscvuxdsp f0, f0
; CHECK-BE-NEXT: xscvdpspn v2, f0
; CHECK-BE-NEXT: vmrghw v2, v2, v3
@ -270,8 +270,8 @@ define i64 @test2elt_signed(i32 %a.coerce) local_unnamed_addr #0 {
; CHECK-P8-NEXT: rldicl r3, r3, 48, 48
; CHECK-P8-NEXT: extsh r4, r4
; CHECK-P8-NEXT: extsh r3, r3
; CHECK-P8-NEXT: mtvsrwa f0, r4
; CHECK-P8-NEXT: mtvsrwa f1, r3
; CHECK-P8-NEXT: mtfprwa f0, r4
; CHECK-P8-NEXT: mtfprwa f1, r3
; CHECK-P8-NEXT: xscvsxdsp f0, f0
; CHECK-P8-NEXT: xscvsxdsp f1, f1
; CHECK-P8-NEXT: xscvdpspn vs0, f0
@ -289,14 +289,14 @@ define i64 @test2elt_signed(i32 %a.coerce) local_unnamed_addr #0 {
; CHECK-P9-NEXT: li r3, 0
; CHECK-P9-NEXT: vextuhrx r3, r3, v2
; CHECK-P9-NEXT: extsh r3, r3
; CHECK-P9-NEXT: mtvsrwa f0, r3
; CHECK-P9-NEXT: mtfprwa f0, r3
; CHECK-P9-NEXT: li r3, 2
; CHECK-P9-NEXT: xscvsxdsp f0, f0
; CHECK-P9-NEXT: xscvdpspn vs0, f0
; CHECK-P9-NEXT: vextuhrx r3, r3, v2
; CHECK-P9-NEXT: extsh r3, r3
; CHECK-P9-NEXT: xxsldwi v3, vs0, vs0, 1
; CHECK-P9-NEXT: mtvsrwa f0, r3
; CHECK-P9-NEXT: mtfprwa f0, r3
; CHECK-P9-NEXT: xscvsxdsp f0, f0
; CHECK-P9-NEXT: xscvdpspn vs0, f0
; CHECK-P9-NEXT: xxsldwi v2, vs0, vs0, 1
@ -310,13 +310,13 @@ define i64 @test2elt_signed(i32 %a.coerce) local_unnamed_addr #0 {
; CHECK-BE-NEXT: li r3, 2
; CHECK-BE-NEXT: vextuhlx r3, r3, v2
; CHECK-BE-NEXT: extsh r3, r3
; CHECK-BE-NEXT: mtvsrwa f0, r3
; CHECK-BE-NEXT: mtfprwa f0, r3
; CHECK-BE-NEXT: li r3, 0
; CHECK-BE-NEXT: xscvsxdsp f0, f0
; CHECK-BE-NEXT: vextuhlx r3, r3, v2
; CHECK-BE-NEXT: extsh r3, r3
; CHECK-BE-NEXT: xscvdpspn v3, f0
; CHECK-BE-NEXT: mtvsrwa f0, r3
; CHECK-BE-NEXT: mtfprwa f0, r3
; CHECK-BE-NEXT: xscvsxdsp f0, f0
; CHECK-BE-NEXT: xscvdpspn v2, f0
; CHECK-BE-NEXT: vmrghw v2, v2, v3

View File

@ -18,8 +18,8 @@ define i64 @test2elt(i16 %a.coerce) local_unnamed_addr #0 {
; CHECK-P8-NEXT: rldicl r3, r3, 56, 56
; CHECK-P8-NEXT: rlwinm r4, r4, 0, 24, 31
; CHECK-P8-NEXT: rlwinm r3, r3, 0, 24, 31
; CHECK-P8-NEXT: mtvsrwz f0, r4
; CHECK-P8-NEXT: mtvsrwz f1, r3
; CHECK-P8-NEXT: mtfprwz f0, r4
; CHECK-P8-NEXT: mtfprwz f1, r3
; CHECK-P8-NEXT: xscvuxdsp f0, f0
; CHECK-P8-NEXT: xscvuxdsp f1, f1
; CHECK-P8-NEXT: xscvdpspn vs0, f0
@ -37,14 +37,14 @@ define i64 @test2elt(i16 %a.coerce) local_unnamed_addr #0 {
; CHECK-P9-NEXT: li r3, 0
; CHECK-P9-NEXT: vextubrx r3, r3, v2
; CHECK-P9-NEXT: rlwinm r3, r3, 0, 24, 31
; CHECK-P9-NEXT: mtvsrwz f0, r3
; CHECK-P9-NEXT: mtfprwz f0, r3
; CHECK-P9-NEXT: li r3, 1
; CHECK-P9-NEXT: xscvuxdsp f0, f0
; CHECK-P9-NEXT: xscvdpspn vs0, f0
; CHECK-P9-NEXT: vextubrx r3, r3, v2
; CHECK-P9-NEXT: rlwinm r3, r3, 0, 24, 31
; CHECK-P9-NEXT: xxsldwi v3, vs0, vs0, 1
; CHECK-P9-NEXT: mtvsrwz f0, r3
; CHECK-P9-NEXT: mtfprwz f0, r3
; CHECK-P9-NEXT: xscvuxdsp f0, f0
; CHECK-P9-NEXT: xscvdpspn vs0, f0
; CHECK-P9-NEXT: xxsldwi v2, vs0, vs0, 1
@ -58,13 +58,13 @@ define i64 @test2elt(i16 %a.coerce) local_unnamed_addr #0 {
; CHECK-BE-NEXT: li r3, 1
; CHECK-BE-NEXT: vextublx r3, r3, v2
; CHECK-BE-NEXT: rlwinm r3, r3, 0, 24, 31
; CHECK-BE-NEXT: mtvsrwz f0, r3
; CHECK-BE-NEXT: mtfprwz f0, r3
; CHECK-BE-NEXT: li r3, 0
; CHECK-BE-NEXT: xscvuxdsp f0, f0
; CHECK-BE-NEXT: vextublx r3, r3, v2
; CHECK-BE-NEXT: rlwinm r3, r3, 0, 24, 31
; CHECK-BE-NEXT: xscvdpspn v3, f0
; CHECK-BE-NEXT: mtvsrwz f0, r3
; CHECK-BE-NEXT: mtfprwz f0, r3
; CHECK-BE-NEXT: xscvuxdsp f0, f0
; CHECK-BE-NEXT: xscvdpspn v2, f0
; CHECK-BE-NEXT: vmrghw v2, v2, v3
@ -286,8 +286,8 @@ define i64 @test2elt_signed(i16 %a.coerce) local_unnamed_addr #0 {
; CHECK-P8-NEXT: rldicl r3, r3, 56, 56
; CHECK-P8-NEXT: extsb r4, r4
; CHECK-P8-NEXT: extsb r3, r3
; CHECK-P8-NEXT: mtvsrwa f0, r4
; CHECK-P8-NEXT: mtvsrwa f1, r3
; CHECK-P8-NEXT: mtfprwa f0, r4
; CHECK-P8-NEXT: mtfprwa f1, r3
; CHECK-P8-NEXT: xscvsxdsp f0, f0
; CHECK-P8-NEXT: xscvsxdsp f1, f1
; CHECK-P8-NEXT: xscvdpspn vs0, f0
@ -305,14 +305,14 @@ define i64 @test2elt_signed(i16 %a.coerce) local_unnamed_addr #0 {
; CHECK-P9-NEXT: li r3, 0
; CHECK-P9-NEXT: vextubrx r3, r3, v2
; CHECK-P9-NEXT: extsb r3, r3
; CHECK-P9-NEXT: mtvsrwa f0, r3
; CHECK-P9-NEXT: mtfprwa f0, r3
; CHECK-P9-NEXT: li r3, 1
; CHECK-P9-NEXT: xscvsxdsp f0, f0
; CHECK-P9-NEXT: xscvdpspn vs0, f0
; CHECK-P9-NEXT: vextubrx r3, r3, v2
; CHECK-P9-NEXT: extsb r3, r3
; CHECK-P9-NEXT: xxsldwi v3, vs0, vs0, 1
; CHECK-P9-NEXT: mtvsrwa f0, r3
; CHECK-P9-NEXT: mtfprwa f0, r3
; CHECK-P9-NEXT: xscvsxdsp f0, f0
; CHECK-P9-NEXT: xscvdpspn vs0, f0
; CHECK-P9-NEXT: xxsldwi v2, vs0, vs0, 1
@ -326,13 +326,13 @@ define i64 @test2elt_signed(i16 %a.coerce) local_unnamed_addr #0 {
; CHECK-BE-NEXT: li r3, 1
; CHECK-BE-NEXT: vextublx r3, r3, v2
; CHECK-BE-NEXT: extsb r3, r3
; CHECK-BE-NEXT: mtvsrwa f0, r3
; CHECK-BE-NEXT: mtfprwa f0, r3
; CHECK-BE-NEXT: li r3, 0
; CHECK-BE-NEXT: xscvsxdsp f0, f0
; CHECK-BE-NEXT: vextublx r3, r3, v2
; CHECK-BE-NEXT: extsb r3, r3
; CHECK-BE-NEXT: xscvdpspn v3, f0
; CHECK-BE-NEXT: mtvsrwa f0, r3
; CHECK-BE-NEXT: mtfprwa f0, r3
; CHECK-BE-NEXT: xscvsxdsp f0, f0
; CHECK-BE-NEXT: xscvdpspn v2, f0
; CHECK-BE-NEXT: vmrghw v2, v2, v3

View File

@ -528,16 +528,31 @@
# CHECK: mfvsrd 3, 40
0x7d 0x03 0x00 0x67
# CHECK: mfvsrwz 5, 0
# CHECK: mffprd 3, 0
0x7c 0x03 0x00 0x66
# CHECK: mfvsrwz 5, 40
0x7d 0x05 0x00 0xe7
# CHECK: mffprwz 5, 0
0x7c 0x05 0x00 0xe6
# CHECK: mtvsrd 0, 3
# CHECK: mtvsrd 40, 3
0x7d 0x03 0x01 0x67
# CHECK: mtfprd 0, 3
0x7c 0x03 0x01 0x66
# CHECK: mtvsrwa 0, 3
# CHECK: mtvsrwa 40, 3
0x7d 0x03 0x01 0xa7
# CHECK: mtfprwa 0, 3
0x7c 0x03 0x01 0xa6
# CHECK: mtvsrwz 0, 3
# CHECK: mtvsrwz 40, 3
0x7d 0x03 0x01 0xe7
# CHECK: mtfprwz 0, 3
0x7c 0x03 0x01 0xe6
# Power9 Instructions:

View File

@ -538,18 +538,64 @@
# CHECK-BE: mfvsrd 3, 40 # encoding: [0x7d,0x03,0x00,0x67]
# CHECK-LE: mfvsrd 3, 40 # encoding: [0x67,0x00,0x03,0x7d]
mfvrd 3, 8
# CHECK-BE: mfvsrwz 5, 0 # encoding: [0x7c,0x05,0x00,0xe6]
# CHECK-LE: mfvsrwz 5, 0 # encoding: [0xe6,0x00,0x05,0x7c]
# CHECK-BE: mffprd 0, 3 # encoding: [0x7c,0x60,0x00,0x66]
# CHECK-LE: mffprd 0, 3 # encoding: [0x66,0x00,0x60,0x7c]
mfvsrd 0, 3
# CHECK-BE: mffprd 0, 3 # encoding: [0x7c,0x60,0x00,0x66]
# CHECK-LE: mffprd 0, 3 # encoding: [0x66,0x00,0x60,0x7c]
mffprd 0, 3
# CHECK-BE: mfvsrwz 5, 40 # encoding: [0x7d,0x05,0x00,0xe7]
# CHECK-LE: mfvsrwz 5, 40 # encoding: [0xe7,0x00,0x05,0x7d]
mfvsrwz 5, 40
# CHECK-BE: mfvsrwz 5, 40 # encoding: [0x7d,0x05,0x00,0xe7]
# CHECK-LE: mfvsrwz 5, 40 # encoding: [0xe7,0x00,0x05,0x7d]
mfvrwz 5, 8
# CHECK-BE: mffprwz 5, 0 # encoding: [0x7c,0x05,0x00,0xe6]
# CHECK-LE: mffprwz 5, 0 # encoding: [0xe6,0x00,0x05,0x7c]
mfvsrwz 5, 0
# CHECK-BE: mtvsrd 0, 3 # encoding: [0x7c,0x03,0x01,0x66]
# CHECK-LE: mtvsrd 0, 3 # encoding: [0x66,0x01,0x03,0x7c]
# CHECK-BE: mffprwz 5, 0 # encoding: [0x7c,0x05,0x00,0xe6]
# CHECK-LE: mffprwz 5, 0 # encoding: [0xe6,0x00,0x05,0x7c]
mffprwz 5, 0
# CHECK-BE: mtvsrd 40, 3 # encoding: [0x7d,0x03,0x01,0x67]
# CHECK-LE: mtvsrd 40, 3 # encoding: [0x67,0x01,0x03,0x7d]
mtvsrd 40, 3
# CHECK-BE: mtvsrd 40, 3 # encoding: [0x7d,0x03,0x01,0x67]
# CHECK-LE: mtvsrd 40, 3 # encoding: [0x67,0x01,0x03,0x7d]
mtvrd 8, 3
# CHECK-BE: mtfprd 0, 3 # encoding: [0x7c,0x03,0x01,0x66]
# CHECK-LE: mtfprd 0, 3 # encoding: [0x66,0x01,0x03,0x7c]
mtvsrd 0, 3
# CHECK-BE: mtvsrwa 0, 3 # encoding: [0x7c,0x03,0x01,0xa6]
# CHECK-LE: mtvsrwa 0, 3 # encoding: [0xa6,0x01,0x03,0x7c]
# CHECK-BE: mtfprd 0, 3 # encoding: [0x7c,0x03,0x01,0x66]
# CHECK-LE: mtfprd 0, 3 # encoding: [0x66,0x01,0x03,0x7c]
mtfprd 0, 3
# CHECK-BE: mtvsrwa 40, 3 # encoding: [0x7d,0x03,0x01,0xa7]
# CHECK-LE: mtvsrwa 40, 3 # encoding: [0xa7,0x01,0x03,0x7d]
mtvsrwa 40, 3
# CHECK-BE: mtvsrwa 40, 3 # encoding: [0x7d,0x03,0x01,0xa7]
# CHECK-LE: mtvsrwa 40, 3 # encoding: [0xa7,0x01,0x03,0x7d]
mtvrwa 8, 3
# CHECK-BE: mtfprwa 0, 3 # encoding: [0x7c,0x03,0x01,0xa6]
# CHECK-LE: mtfprwa 0, 3 # encoding: [0xa6,0x01,0x03,0x7c]
mtvsrwa 0, 3
# CHECK-BE: mtvsrwz 0, 3 # encoding: [0x7c,0x03,0x01,0xe6]
# CHECK-LE: mtvsrwz 0, 3 # encoding: [0xe6,0x01,0x03,0x7c]
# CHECK-BE: mtfprwa 0, 3 # encoding: [0x7c,0x03,0x01,0xa6]
# CHECK-LE: mtfprwa 0, 3 # encoding: [0xa6,0x01,0x03,0x7c]
mtfprwa 0, 3
# CHECK-BE: mtvsrwz 40, 3 # encoding: [0x7d,0x03,0x01,0xe7]
# CHECK-LE: mtvsrwz 40, 3 # encoding: [0xe7,0x01,0x03,0x7d]
mtvsrwz 40, 3
# CHECK-BE: mtvsrwz 40, 3 # encoding: [0x7d,0x03,0x01,0xe7]
# CHECK-LE: mtvsrwz 40, 3 # encoding: [0xe7,0x01,0x03,0x7d]
mtvrwz 8, 3
# CHECK-BE: mtfprwz 0, 3 # encoding: [0x7c,0x03,0x01,0xe6]
# CHECK-LE: mtfprwz 0, 3 # encoding: [0xe6,0x01,0x03,0x7c]
mtvsrwz 0, 3
# CHECK-BE: mtfprwz 0, 3 # encoding: [0x7c,0x03,0x01,0xe6]
# CHECK-LE: mtfprwz 0, 3 # encoding: [0xe6,0x01,0x03,0x7c]
mtfprwz 0, 3
# Power9 Instructions: