diff options
author | Colin LeMahieu <colinl@codeaurora.org> | 2014-12-26 20:42:27 +0000 |
---|---|---|
committer | Colin LeMahieu <colinl@codeaurora.org> | 2014-12-26 20:42:27 +0000 |
commit | 0a721cd4e152e0dea9f8c0dc04dce530e9e7c64d (patch) | |
tree | 843c6522ad7303a3cafadd8e70bfb6c9c8fe9c16 | |
parent | ff370ed90e711e87c028bdedd97007809decb16c (diff) | |
download | bcm5719-llvm-0a721cd4e152e0dea9f8c0dc04dce530e9e7c64d.tar.gz bcm5719-llvm-0a721cd4e152e0dea9f8c0dc04dce530e9e7c64d.zip |
[Hexagon] Adding locked loads.
llvm-svn: 224870
-rw-r--r-- | llvm/lib/Target/Hexagon/HexagonInstrInfo.td | 19 | ||||
-rw-r--r-- | llvm/test/MC/Disassembler/Hexagon/system_user.txt | 4 |
2 files changed, 23 insertions, 0 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonInstrInfo.td b/llvm/lib/Target/Hexagon/HexagonInstrInfo.td index 0ed527b82cc..e14a2f27f17 100644 --- a/llvm/lib/Target/Hexagon/HexagonInstrInfo.td +++ b/llvm/lib/Target/Hexagon/HexagonInstrInfo.td @@ -1852,6 +1852,25 @@ def L2_loadri_pci : T_load_pci <"memw", IntRegs, s4_2Imm, 0b1100>; let accessSize = DoubleWordAccess, hasNewValue = 0, isCodeGenOnly = 0 in def L2_loadrd_pci : T_load_pci <"memd", DoubleRegs, s4_3Imm, 0b1110>; +// L[24]_load[wd]_locked: Load word/double with lock. +let isSoloAX = 1 in +class T_load_locked <string mnemonic, RegisterClass RC> + : LD0Inst <(outs RC:$dst), + (ins IntRegs:$src), + "$dst = "#mnemonic#"($src)"> { + bits<5> dst; + bits<5> src; + let IClass = 0b1001; + let Inst{27-21} = 0b0010000; + let Inst{20-16} = src; + let Inst{13-12} = !if (!eq(mnemonic, "memd_locked"), 0b01, 0b00); + let Inst{4-0} = dst; +} +let hasNewValue = 1, accessSize = WordAccess, opNewValue = 0, isCodeGenOnly = 0 in + def L2_loadw_locked : T_load_locked <"memw_locked", IntRegs>; +let accessSize = DoubleWordAccess, isCodeGenOnly = 0 in + def L4_loadd_locked : T_load_locked <"memd_locked", DoubleRegs>; + //===----------------------------------------------------------------------===// // LD - //===----------------------------------------------------------------------===// diff --git a/llvm/test/MC/Disassembler/Hexagon/system_user.txt b/llvm/test/MC/Disassembler/Hexagon/system_user.txt index 165910043dc..f13b2b67f8e 100644 --- a/llvm/test/MC/Disassembler/Hexagon/system_user.txt +++ b/llvm/test/MC/Disassembler/Hexagon/system_user.txt @@ -1,5 +1,9 @@ # RUN: llvm-mc --triple hexagon -disassemble < %s | FileCheck %s +0x11 0xc0 0x15 0x92 +# CHECK: r17 = memw_locked(r21) +0x10 0xd0 0x15 0x92 +# CHECK: r17:16 = memd_locked(r21) 0x00 0xc0 0x00 0xa8 # CHECK: barrier 0x00 0xc0 0x51 0x62 |