mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 20:29:48 +00:00
Add some MMX intrinsics that duplicate functionality
available in normal llvm operators. We aren't going to use those for MMX any more because it's unsafe for the optimizers to synthesize new MMX instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112685 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ae84d5b9ba
commit
c88d829c87
@ -1324,6 +1324,19 @@ let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
|
||||
// Integer arithmetic ops.
|
||||
let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
|
||||
// Addition
|
||||
def int_x86_mmx_padd_b : GCCBuiltin<"__builtin_ia32_paddb">,
|
||||
Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty, llvm_v8i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_mmx_padd_w : GCCBuiltin<"__builtin_ia32_paddw">,
|
||||
Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty, llvm_v4i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_mmx_padd_d : GCCBuiltin<"__builtin_ia32_paddd">,
|
||||
Intrinsic<[llvm_v2i32_ty], [llvm_v2i32_ty, llvm_v2i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_mmx_padd_q : GCCBuiltin<"__builtin_ia32_paddq">,
|
||||
Intrinsic<[llvm_v1i64_ty], [llvm_v1i64_ty, llvm_v1i64_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_mmx_padds_b : GCCBuiltin<"__builtin_ia32_paddsb">,
|
||||
Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty,
|
||||
llvm_v8i8_ty], [IntrNoMem, Commutative]>;
|
||||
@ -1339,6 +1352,19 @@ let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
|
||||
llvm_v4i16_ty], [IntrNoMem, Commutative]>;
|
||||
|
||||
// Subtraction
|
||||
def int_x86_mmx_psub_b : GCCBuiltin<"__builtin_ia32_psubb">,
|
||||
Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty, llvm_v8i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_mmx_psub_w : GCCBuiltin<"__builtin_ia32_psubw">,
|
||||
Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty, llvm_v4i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_mmx_psub_d : GCCBuiltin<"__builtin_ia32_psubd">,
|
||||
Intrinsic<[llvm_v2i32_ty], [llvm_v2i32_ty, llvm_v2i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_mmx_psub_q : GCCBuiltin<"__builtin_ia32_psubq">,
|
||||
Intrinsic<[llvm_v1i64_ty], [llvm_v1i64_ty, llvm_v1i64_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
def int_x86_mmx_psubs_b : GCCBuiltin<"__builtin_ia32_psubsb">,
|
||||
Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty,
|
||||
llvm_v8i8_ty], [IntrNoMem]>;
|
||||
@ -1357,6 +1383,9 @@ let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
|
||||
def int_x86_mmx_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw">,
|
||||
Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
|
||||
llvm_v4i16_ty], [IntrNoMem, Commutative]>;
|
||||
def int_x86_mmx_pmull_w : GCCBuiltin<"__builtin_ia32_pmullw">,
|
||||
Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
|
||||
llvm_v4i16_ty], [IntrNoMem, Commutative]>;
|
||||
def int_x86_mmx_pmulhu_w : GCCBuiltin<"__builtin_ia32_pmulhuw">,
|
||||
Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty,
|
||||
llvm_v4i16_ty], [IntrNoMem, Commutative]>;
|
||||
@ -1367,6 +1396,20 @@ let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
|
||||
Intrinsic<[llvm_v2i32_ty], [llvm_v4i16_ty,
|
||||
llvm_v4i16_ty], [IntrNoMem, Commutative]>;
|
||||
|
||||
// Bitwise operations
|
||||
def int_x86_mmx_pand : GCCBuiltin<"__builtin_ia32_pand">,
|
||||
Intrinsic<[llvm_v1i64_ty], [llvm_v1i64_ty, llvm_v1i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_mmx_pandn : GCCBuiltin<"__builtin_ia32_pandn">,
|
||||
Intrinsic<[llvm_v1i64_ty], [llvm_v1i64_ty, llvm_v1i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_mmx_por : GCCBuiltin<"__builtin_ia32_por">,
|
||||
Intrinsic<[llvm_v1i64_ty], [llvm_v1i64_ty, llvm_v1i64_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_mmx_pxor : GCCBuiltin<"__builtin_ia32_pxor">,
|
||||
Intrinsic<[llvm_v1i64_ty], [llvm_v1i64_ty, llvm_v1i64_ty],
|
||||
[IntrNoMem]>;
|
||||
|
||||
// Averages
|
||||
def int_x86_mmx_pavg_b : GCCBuiltin<"__builtin_ia32_pavgb">,
|
||||
Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty,
|
||||
@ -1468,6 +1511,28 @@ let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
|
||||
llvm_v4i16_ty], [IntrNoMem]>;
|
||||
}
|
||||
|
||||
// Unpacking ops.
|
||||
let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
|
||||
def int_x86_mmx_punpckhbw : GCCBuiltin<"__builtin_ia32_punpckhbw">,
|
||||
Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty, llvm_v8i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_mmx_punpckhwd : GCCBuiltin<"__builtin_ia32_punpckhwd">,
|
||||
Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty, llvm_v4i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_mmx_punpckhdq : GCCBuiltin<"__builtin_ia32_punpckhdq">,
|
||||
Intrinsic<[llvm_v2i32_ty], [llvm_v2i32_ty, llvm_v2i32_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_mmx_punpcklbw : GCCBuiltin<"__builtin_ia32_punpcklbw">,
|
||||
Intrinsic<[llvm_v8i8_ty], [llvm_v8i8_ty, llvm_v8i8_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_mmx_punpcklwd : GCCBuiltin<"__builtin_ia32_punpcklwd">,
|
||||
Intrinsic<[llvm_v4i16_ty], [llvm_v4i16_ty, llvm_v4i16_ty],
|
||||
[IntrNoMem]>;
|
||||
def int_x86_mmx_punpckldq : GCCBuiltin<"__builtin_ia32_punpckldq">,
|
||||
Intrinsic<[llvm_v2i32_ty], [llvm_v2i32_ty, llvm_v2i32_ty],
|
||||
[IntrNoMem]>;
|
||||
}
|
||||
|
||||
// Integer comparison ops
|
||||
let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
|
||||
def int_x86_mmx_pcmpeq_b : GCCBuiltin<"__builtin_ia32_pcmpeqb">,
|
||||
@ -1501,4 +1566,13 @@ let TargetPrefix = "x86" in { // All intrinsics start with "llvm.x86.".
|
||||
|
||||
def int_x86_mmx_movnt_dq : GCCBuiltin<"__builtin_ia32_movntq">,
|
||||
Intrinsic<[], [llvm_ptr_ty, llvm_v1i64_ty], []>;
|
||||
|
||||
def int_x86_mmx_cvtsi32_MMX : GCCBuiltin<"__builtin_ia32_vec_init_v2si">,
|
||||
Intrinsic<[llvm_v1i64_ty], [llvm_i32_ty], [IntrNoMem]>;
|
||||
def int_x86_mmx_cvtsi64_MMX :
|
||||
Intrinsic<[llvm_v1i64_ty], [llvm_i64_ty], [IntrNoMem]>;
|
||||
def int_x86_mmx_MMX_si32 : GCCBuiltin<"__builtin_ia32_vec_ext_v2si">,
|
||||
Intrinsic<[llvm_i32_ty], [llvm_v1i64_ty], [IntrNoMem]>;
|
||||
def int_x86_mmx_MMX_si64 :
|
||||
Intrinsic<[llvm_i64_ty], [llvm_v1i64_ty], [IntrNoMem]>;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user