69 lines
1.9 KiB
LLVM
69 lines
1.9 KiB
LLVM
|
; RUN: llc < %s -mtriple=ve | FileCheck %s
|
|||
|
|
|||
|
;;; Test ‘fneg’ Instruction
|
|||
|
;;;
|
|||
|
;;; Syntax:
|
|||
|
;;; <result> = fneg [fast-math flags]* <ty> <op1> ; yields ty:result
|
|||
|
;;;
|
|||
|
;;; Overview:
|
|||
|
;;; The ‘fneg’ instruction returns the negation of its operand.
|
|||
|
;;;
|
|||
|
;;; Arguments:
|
|||
|
;;; The argument to the ‘fneg’ instruction must be a floating-point or
|
|||
|
;;; vector of floating-point values.
|
|||
|
;;;
|
|||
|
;;; Semantics:
|
|||
|
;;;
|
|||
|
;;; The value produced is a copy of the operand with its sign bit flipped.
|
|||
|
;;; This instruction can also take any number of fast-math flags, which are
|
|||
|
;;; optimization hints to enable otherwise unsafe floating-point
|
|||
|
;;; optimizations.
|
|||
|
;;;
|
|||
|
;;; Example:
|
|||
|
;;; <result> = fneg float %val ; yields float:result = -%var
|
|||
|
;;;
|
|||
|
;;; Note:
|
|||
|
;;; We test only float/double/fp128.
|
|||
|
|
|||
|
; Function Attrs: norecurse nounwind readnone
|
|||
|
define float @fneg_float(float %0) {
|
|||
|
; CHECK-LABEL: fneg_float:
|
|||
|
; CHECK: # %bb.0:
|
|||
|
; CHECK-NEXT: sra.l %s0, %s0, 32
|
|||
|
; CHECK-NEXT: lea %s1, -2147483648
|
|||
|
; CHECK-NEXT: and %s1, %s1, (32)0
|
|||
|
; CHECK-NEXT: xor %s0, %s0, %s1
|
|||
|
; CHECK-NEXT: sll %s0, %s0, 32
|
|||
|
; CHECK-NEXT: b.l.t (, %s10)
|
|||
|
%2 = fneg float %0
|
|||
|
ret float %2
|
|||
|
}
|
|||
|
|
|||
|
; Function Attrs: norecurse nounwind readnone
|
|||
|
define double @fneg_double(double %0) {
|
|||
|
; CHECK-LABEL: fneg_double:
|
|||
|
; CHECK: # %bb.0:
|
|||
|
; CHECK-NEXT: xor %s0, %s0, (1)1
|
|||
|
; CHECK-NEXT: b.l.t (, %s10)
|
|||
|
%2 = fneg double %0
|
|||
|
ret double %2
|
|||
|
}
|
|||
|
|
|||
|
; Function Attrs: norecurse nounwind readnone
|
|||
|
define fp128 @fneg_quad(fp128 %0) {
|
|||
|
; CHECK-LABEL: fneg_quad:
|
|||
|
; CHECK: .LBB{{[0-9]+}}_2:
|
|||
|
; CHECK-NEXT: st %s1, (, %s11)
|
|||
|
; CHECK-NEXT: st %s0, 8(, %s11)
|
|||
|
; CHECK-NEXT: ld1b.zx %s0, 15(, %s11)
|
|||
|
; CHECK-NEXT: lea %s1, 128
|
|||
|
; CHECK-NEXT: xor %s0, %s0, %s1
|
|||
|
; CHECK-NEXT: st1b %s0, 15(, %s11)
|
|||
|
; CHECK-NEXT: ld %s1, (, %s11)
|
|||
|
; CHECK-NEXT: ld %s0, 8(, %s11)
|
|||
|
; CHECK-NEXT: adds.l %s11, 16, %s11
|
|||
|
; CHECK-NEXT: b.l.t (, %s10)
|
|||
|
%2 = fneg fp128 %0
|
|||
|
ret fp128 %2
|
|||
|
}
|