// REQUIRES: x86-registered-target
// RUN: %clang_cc1 %s -triple=x86_64-unknown-unknown -target-feature +3dnowa -emit-llvm -o - -Werror | FileCheck %s
// RUN: %clang_cc1 %s -triple=x86_64-unknown-unknown -target-feature +3dnowa -S -o - -Werror | FileCheck %s --check-prefix=CHECK-ASM

// Don't include mm_malloc.h, it's system specific.
#define __MM_MALLOC_H

#include <x86intrin.h>

__m64 test_m_pavgusb(__m64 m1, __m64 m2) {
  // CHECK-LABEL: define i64 @test_m_pavgusb
  // CHECK: @llvm.x86.3dnow.pavgusb
  // CHECK-ASM: pavgusb %mm{{.*}}, %mm{{.*}}
  return _m_pavgusb(m1, m2);
}

__m64 test_m_pf2id(__m64 m) {
  // CHECK-LABEL: define i64 @test_m_pf2id
  // CHECK: @llvm.x86.3dnow.pf2id
  // CHECK-ASM: pf2id %mm{{.*}}, %mm{{.*}}
  return _m_pf2id(m);
}

__m64 test_m_pfacc(__m64 m1, __m64 m2) {
  // CHECK-LABEL: define i64 @test_m_pfacc
  // CHECK: @llvm.x86.3dnow.pfacc
  // CHECK-ASM: pfacc %mm{{.*}}, %mm{{.*}}
  return _m_pfacc(m1, m2);
}

__m64 test_m_pfadd(__m64 m1, __m64 m2) {
  // CHECK-LABEL: define i64 @test_m_pfadd
  // CHECK: @llvm.x86.3dnow.pfadd
  // CHECK-ASM: pfadd %mm{{.*}}, %mm{{.*}}
  return _m_pfadd(m1, m2);
}

__m64 test_m_pfcmpeq(__m64 m1, __m64 m2) {
  // CHECK-LABEL: define i64 @test_m_pfcmpeq
  // CHECK: @llvm.x86.3dnow.pfcmpeq
  // CHECK-ASM: pfcmpeq %mm{{.*}}, %mm{{.*}}
  return _m_pfcmpeq(m1, m2);
}

__m64 test_m_pfcmpge(__m64 m1, __m64 m2) {
  // CHECK-LABEL: define i64 @test_m_pfcmpge
  // CHECK: @llvm.x86.3dnow.pfcmpge
  // CHECK-ASM: pfcmpge %mm{{.*}}, %mm{{.*}}
  return _m_pfcmpge(m1, m2);
}

__m64 test_m_pfcmpgt(__m64 m1, __m64 m2) {
  // CHECK-LABEL: define i64 @test_m_pfcmpgt
  // CHECK: @llvm.x86.3dnow.pfcmpgt
  // CHECK-ASM: pfcmpgt %mm{{.*}}, %mm{{.*}}
  return _m_pfcmpgt(m1, m2);
}

__m64 test_m_pfmax(__m64 m1, __m64 m2) {
  // CHECK-LABEL: define i64 @test_m_pfmax
  // CHECK: @llvm.x86.3dnow.pfmax
  // CHECK-ASM: pfmax %mm{{.*}}, %mm{{.*}}
  return _m_pfmax(m1, m2);
}

__m64 test_m_pfmin(__m64 m1, __m64 m2) {
  // CHECK-LABEL: define i64 @test_m_pfmin
  // CHECK: @llvm.x86.3dnow.pfmin
  // CHECK-ASM: pfmin %mm{{.*}}, %mm{{.*}}
  return _m_pfmin(m1, m2);
}

__m64 test_m_pfmul(__m64 m1, __m64 m2) {
  // CHECK-LABEL: define i64 @test_m_pfmul
  // CHECK: @llvm.x86.3dnow.pfmul
  // CHECK-ASM: pfmul %mm{{.*}}, %mm{{.*}}
  return _m_pfmul(m1, m2);
}

__m64 test_m_pfrcp(__m64 m) {
  // CHECK-LABEL: define i64 @test_m_pfrcp
  // CHECK: @llvm.x86.3dnow.pfrcp
  // CHECK-ASM: pfrcp %mm{{.*}}, %mm{{.*}}
  return _m_pfrcp(m);
}

__m64 test_m_pfrcpit1(__m64 m1, __m64 m2) {
  // CHECK-LABEL: define i64 @test_m_pfrcpit1
  // CHECK: @llvm.x86.3dnow.pfrcpit1
  // CHECK-ASM: pfrcpit1 %mm{{.*}}, %mm{{.*}}
  return _m_pfrcpit1(m1, m2);
}

__m64 test_m_pfrcpit2(__m64 m1, __m64 m2) {
  // CHECK-LABEL: define i64 @test_m_pfrcpit2
  // CHECK: @llvm.x86.3dnow.pfrcpit2
  // CHECK-ASM: pfrcpit2 %mm{{.*}}, %mm{{.*}}
  return _m_pfrcpit2(m1, m2);
}

__m64 test_m_pfrsqrt(__m64 m) {
  // CHECK-LABEL: define i64 @test_m_pfrsqrt
  // CHECK: @llvm.x86.3dnow.pfrsqrt
  // CHECK-ASM: pfrsqrt %mm{{.*}}, %mm{{.*}}
  return _m_pfrsqrt(m);
}

__m64 test_m_pfrsqrtit1(__m64 m1, __m64 m2) {
  // CHECK-LABEL: define i64 @test_m_pfrsqrtit1
  // CHECK: @llvm.x86.3dnow.pfrsqit1
  // CHECK-ASM: pfrsqit1 %mm{{.*}}, %mm{{.*}}
  return _m_pfrsqrtit1(m1, m2);
}

__m64 test_m_pfsub(__m64 m1, __m64 m2) {
  // CHECK-LABEL: define i64 @test_m_pfsub
  // CHECK: @llvm.x86.3dnow.pfsub
  // CHECK-ASM: pfsub %mm{{.*}}, %mm{{.*}}
  return _m_pfsub(m1, m2);
}

__m64 test_m_pfsubr(__m64 m1, __m64 m2) {
  // CHECK-LABEL: define i64 @test_m_pfsubr
  // CHECK: @llvm.x86.3dnow.pfsubr
  // CHECK-ASM: pfsubr %mm{{.*}}, %mm{{.*}}
  return _m_pfsubr(m1, m2);
}

__m64 test_m_pi2fd(__m64 m) {
  // CHECK-LABEL: define i64 @test_m_pi2fd
  // CHECK: @llvm.x86.3dnow.pi2fd
  // CHECK-ASM: pi2fd %mm{{.*}}, %mm{{.*}}
  return _m_pi2fd(m);
}

__m64 test_m_pmulhrw(__m64 m1, __m64 m2) {
  // CHECK-LABEL: define i64 @test_m_pmulhrw
  // CHECK: @llvm.x86.3dnow.pmulhrw
  return _m_pmulhrw(m1, m2);
}

__m64 test_m_pf2iw(__m64 m) {
  // CHECK-LABEL: define i64 @test_m_pf2iw
  // CHECK: @llvm.x86.3dnowa.pf2iw
  // CHECK-ASM: pf2iw %mm{{.*}}, %mm{{.*}}
  return _m_pf2iw(m);
}

__m64 test_m_pfnacc(__m64 m1, __m64 m2) {
  // CHECK-LABEL: define i64 @test_m_pfnacc
  // CHECK: @llvm.x86.3dnowa.pfnacc
  // CHECK-ASM: pfnacc %mm{{.*}}, %mm{{.*}}
  return _m_pfnacc(m1, m2);
}

__m64 test_m_pfpnacc(__m64 m1, __m64 m2) {
  // CHECK-LABEL: define i64 @test_m_pfpnacc
  // CHECK: @llvm.x86.3dnowa.pfpnacc
  // CHECK-ASM: pfpnacc %mm{{.*}}, %mm{{.*}}
  return _m_pfpnacc(m1, m2);
}

__m64 test_m_pi2fw(__m64 m) {
  // CHECK-LABEL: define i64 @test_m_pi2fw
  // CHECK: @llvm.x86.3dnowa.pi2fw
  // CHECK-ASM: pi2fw %mm{{.*}}, %mm{{.*}}
  return _m_pi2fw(m);
}

__m64 test_m_pswapdsf(__m64 m) {
  // CHECK-LABEL: define i64 @test_m_pswapdsf
  // CHECK: @llvm.x86.3dnowa.pswapd
  // CHECK-ASM: pswapd %mm{{.*}}, %mm{{.*}}
  return _m_pswapdsf(m);
}

__m64 test_m_pswapdsi(__m64 m) {
  // CHECK-LABEL: define i64 @test_m_pswapdsi
  // CHECK: @llvm.x86.3dnowa.pswapd
  // CHECK-ASM: pswapd %mm{{.*}}, %mm{{.*}}
  return _m_pswapdsi(m);
}
