mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-10 02:36:06 +00:00
add Thumb2 atomic and memory barrier instruction definitions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91310 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
015d3b5704
commit
c219e4dd59
@ -1064,6 +1064,66 @@ def t2MOVCCror : T2I<(outs GPR:$dst), (ins GPR:$false, GPR:$true, i32imm:$rhs),
|
||||
IIC_iCMOVsi, "ror", ".w\t$dst, $true, $rhs", []>,
|
||||
RegConstraint<"$false = $dst">;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Atomic operations intrinsics
|
||||
//
|
||||
|
||||
// memory barriers protect the atomic sequences
|
||||
let hasSideEffects = 1 in {
|
||||
def t2Int_MemBarrierV7 : AInoP<(outs), (ins),
|
||||
Pseudo, NoItinerary,
|
||||
"dmb", "",
|
||||
[(ARMMemBarrier)]> {
|
||||
// FIXME: add support for options other than a full system DMB
|
||||
}
|
||||
|
||||
def t2Int_SyncBarrierV7 : AInoP<(outs), (ins),
|
||||
Pseudo, NoItinerary,
|
||||
"dsb", "",
|
||||
[(ARMSyncBarrier)]> {
|
||||
// FIXME: add support for options other than a full system DSB
|
||||
}
|
||||
}
|
||||
|
||||
let mayLoad = 1 in {
|
||||
def t2LDREXB : Thumb2I<(outs GPR:$dest), (ins GPR:$ptr), AddrModeNone,
|
||||
Size4Bytes, NoItinerary,
|
||||
"ldrexb", "\t$dest, [$ptr]", "",
|
||||
[]>;
|
||||
def t2LDREXH : Thumb2I<(outs GPR:$dest), (ins GPR:$ptr), AddrModeNone,
|
||||
Size4Bytes, NoItinerary,
|
||||
"ldrexh", "\t$dest, [$ptr]", "",
|
||||
[]>;
|
||||
def t2LDREX : Thumb2I<(outs GPR:$dest), (ins GPR:$ptr), AddrModeNone,
|
||||
Size4Bytes, NoItinerary,
|
||||
"ldrex", "\t$dest, [$ptr]", "",
|
||||
[]>;
|
||||
def t2LDREXD : Thumb2I<(outs GPR:$dest, GPR:$dest2), (ins GPR:$ptr),
|
||||
AddrModeNone, Size4Bytes, NoItinerary,
|
||||
"ldrexd", "\t$dest, $dest2, [$ptr]", "",
|
||||
[]>;
|
||||
}
|
||||
|
||||
let mayStore = 1 in {
|
||||
def t2STREXB : Thumb2I<(outs GPR:$success), (ins GPR:$src, GPR:$ptr),
|
||||
AddrModeNone, Size4Bytes, NoItinerary,
|
||||
"strexb", "\t$success, $src, [$ptr]", "",
|
||||
[]>;
|
||||
def t2STREXH : Thumb2I<(outs GPR:$success), (ins GPR:$src, GPR:$ptr),
|
||||
AddrModeNone, Size4Bytes, NoItinerary,
|
||||
"strexh", "\t$success, $src, [$ptr]", "",
|
||||
[]>;
|
||||
def t2STREX : Thumb2I<(outs GPR:$success), (ins GPR:$src, GPR:$ptr),
|
||||
AddrModeNone, Size4Bytes, NoItinerary,
|
||||
"strex", "\t$success, $src, [$ptr]", "",
|
||||
[]>;
|
||||
def t2STREXD : Thumb2I<(outs GPR:$success),
|
||||
(ins GPR:$src, GPR:$src2, GPR:$ptr),
|
||||
AddrModeNone, Size4Bytes, NoItinerary,
|
||||
"strexd", "\t$success, $src, $src2, [$ptr]", "",
|
||||
[]>;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// TLS Instructions
|
||||
//
|
||||
|
Loading…
x
Reference in New Issue
Block a user