Marek Olsak | 5df00d6 | 2014-12-07 12:18:57 +0000 | [diff] [blame] | 1 | //===-- VIInstructions.td - VI Instruction Defintions ---------------------===// |
| 2 | // |
| 3 | // The LLVM Compiler Infrastructure |
| 4 | // |
| 5 | // This file is distributed under the University of Illinois Open Source |
| 6 | // License. See LICENSE.TXT for details. |
| 7 | // |
| 8 | //===----------------------------------------------------------------------===// |
| 9 | // Instruction definitions for VI and newer. |
| 10 | //===----------------------------------------------------------------------===// |
| 11 | |
Tom Stellard | d1f0f02 | 2015-04-23 19:33:54 +0000 | [diff] [blame^] | 12 | let SIAssemblerPredicate = DisableInst, SubtargetPredicate = isVI in { |
| 13 | |
| 14 | //===----------------------------------------------------------------------===// |
| 15 | // VOP1 Instructions |
| 16 | //===----------------------------------------------------------------------===// |
| 17 | |
| 18 | defm V_CVT_F16_U16 : VOP1Inst <vop1<0, 0x39>, "v_cvt_f16_u16", VOP_F16_I16>; |
| 19 | defm V_CVT_F16_I16 : VOP1Inst <vop1<0, 0x3a>, "v_cvt_f16_i16", VOP_F16_I16>; |
| 20 | defm V_CVT_U16_F16 : VOP1Inst <vop1<0, 0x3b>, "v_cvt_u16_f16", VOP_I16_F16>; |
| 21 | defm V_CVT_I16_F16 : VOP1Inst <vop1<0, 0x3c>, "v_cvt_i16_f16", VOP_I16_F16>; |
| 22 | defm V_RCP_F16 : VOP1Inst <vop1<0, 0x3d>, "v_rcp_f16", VOP_F16_F16>; |
| 23 | defm V_SQRT_F16 : VOP1Inst <vop1<0, 0x3e>, "v_sqrt_f16", VOP_F16_F16>; |
| 24 | defm V_RSQ_F16 : VOP1Inst <vop1<0, 0x3f>, "v_rsq_f16", VOP_F16_F16>; |
| 25 | defm V_LOG_F16 : VOP1Inst <vop1<0, 0x40>, "v_log_f16", VOP_F16_F16>; |
| 26 | defm V_EXP_F16 : VOP1Inst <vop1<0, 0x41>, "v_exp_f16", VOP_F16_F16>; |
| 27 | defm V_FREXP_MANT_F16 : VOP1Inst <vop1<0, 0x42>, "v_frexp_mant_f16", |
| 28 | VOP_F16_F16 |
| 29 | >; |
| 30 | defm V_FREXP_EXP_I16_F16 : VOP1Inst <vop1<0, 0x43>, "v_frexp_exp_i16_f16", |
| 31 | VOP_I16_F16 |
| 32 | >; |
| 33 | defm V_FLOOR_F16 : VOP1Inst <vop1<0, 0x44>, "v_floor_f16", VOP_F16_F16>; |
| 34 | defm V_CEIL_F16 : VOP1Inst <vop1<0, 0x45>, "v_ceil_f16", VOP_F16_F16>; |
| 35 | defm V_TRUNC_F16 : VOP1Inst <vop1<0, 0x46>, "v_trunc_f16", VOP_F16_F16>; |
| 36 | defm V_RNDNE_F16 : VOP1Inst <vop1<0, 0x47>, "v_rndne_f16", VOP_F16_F16>; |
| 37 | defm V_FRACT_F16 : VOP1Inst <vop1<0, 0x48>, "v_fract_f16", VOP_F16_F16>; |
| 38 | defm V_SIN_F16 : VOP1Inst <vop1<0, 0x49>, "v_sin_f16", VOP_F16_F16>; |
| 39 | defm V_COS_F16 : VOP1Inst <vop1<0, 0x4a>, "v_cos_f16", VOP_F16_F16>; |
| 40 | |
| 41 | } // End SIAssemblerPredicate = DisableInst, SubtargetPredicate = isVI |
Marek Olsak | 5df00d6 | 2014-12-07 12:18:57 +0000 | [diff] [blame] | 42 | |
| 43 | //===----------------------------------------------------------------------===// |
Marek Olsak | 58f61a8 | 2014-12-07 17:17:38 +0000 | [diff] [blame] | 44 | // SMEM Patterns |
| 45 | //===----------------------------------------------------------------------===// |
| 46 | |
Marek Olsak | f0b130a | 2015-01-15 18:43:06 +0000 | [diff] [blame] | 47 | let Predicates = [isVI] in { |
| 48 | |
Marek Olsak | ee98b11 | 2015-01-27 17:24:58 +0000 | [diff] [blame] | 49 | // 1. Offset as 20bit DWORD immediate |
Marek Olsak | 58f61a8 | 2014-12-07 17:17:38 +0000 | [diff] [blame] | 50 | def : Pat < |
| 51 | (SIload_constant v4i32:$sbase, IMM20bit:$offset), |
| 52 | (S_BUFFER_LOAD_DWORD_IMM $sbase, (as_i32imm $offset)) |
| 53 | >; |
| 54 | |
Marek Olsak | 5df00d6 | 2014-12-07 12:18:57 +0000 | [diff] [blame] | 55 | } // End Predicates = [isVI] |