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", []>,
|
IIC_iCMOVsi, "ror", ".w\t$dst, $true, $rhs", []>,
|
||||||
RegConstraint<"$false = $dst">;
|
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
|
// TLS Instructions
|
||||||
//
|
//
|
||||||
|
Loading…
x
Reference in New Issue
Block a user