Skip to content

Commit

Permalink
Implementation of STBCX
Browse files Browse the repository at this point in the history
  • Loading branch information
Conanap committed Jul 14, 2021
1 parent 8a0f116 commit 09df619
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 0 deletions.
1 change: 1 addition & 0 deletions clang/include/clang/Basic/BuiltinsPPC.def
Expand Up @@ -58,6 +58,7 @@ BUILTIN(__builtin_ppc_fetch_and_swaplp, "ULiULiD*ULi", "")
BUILTIN(__builtin_ppc_ldarx, "LiLiD*", "")
BUILTIN(__builtin_ppc_lwarx, "iiD*", "")
BUILTIN(__builtin_ppc_stdcx, "iLiD*Li", "")
BUILTIN(__builtin_ppc_stbcx, "icD*c", "")
BUILTIN(__builtin_ppc_stwcx, "iiD*i", "")
BUILTIN(__builtin_ppc_tdw, "vLLiLLiIUi", "")
BUILTIN(__builtin_ppc_tw, "viiIUi", "")
Expand Down
1 change: 1 addition & 0 deletions clang/lib/Basic/Targets/PPC.cpp
Expand Up @@ -118,6 +118,7 @@ static void defineXLCompatMacros(MacroBuilder &Builder) {
Builder.defineMacro("__lwarx", "__builtin_ppc_lwarx");
Builder.defineMacro("__stdcx", "__builtin_ppc_stdcx");
Builder.defineMacro("__stwcx", "__builtin_ppc_stwcx");
Builder.defineMacro("__stbcx", "__builtin_ppc_stbcx");
Builder.defineMacro("__tdw", "__builtin_ppc_tdw");
Builder.defineMacro("__tw", "__builtin_ppc_tw");
Builder.defineMacro("__trap", "__builtin_ppc_trap");
Expand Down
15 changes: 15 additions & 0 deletions clang/lib/CodeGen/CGBuiltin.cpp
Expand Up @@ -15575,6 +15575,21 @@ Value *CodeGenFunction::EmitPPCBuiltinExpr(unsigned BuiltinID,
case PPC::BI__builtin_ppc_ldarx:
case PPC::BI__builtin_ppc_lwarx:
return emitPPCLoadReserveIntrinsic(*this, BuiltinID, E);
case PPC::BI__builtin_ppc_stbcx: {
llvm::Function *F = CGM.getIntrinsic(Intrinsic::ppc_stbcx);
Ops[0] = Builder.CreateBitCast(Ops[0], Int8PtrTy);
auto Signed = getIntegerWidthAndSignedness(CGM.getContext(),
E->getArg(1)->getType()).Signed;

if (Signed) {
dbgs() << "SIGNED\n";
Ops[1] = Builder.CreateSExt(Ops[1], Int32Ty);
} else {
dbgs() << "UNSIGNED\n";
Ops[1] = Builder.CreateZExt(Ops[1], Int32Ty);
}
return Builder.CreateCall(F, Ops);
}
}
}

Expand Down
1 change: 1 addition & 0 deletions llvm/include/llvm/IR/IntrinsicsPowerPC.td
Expand Up @@ -1565,6 +1565,7 @@ let TargetPrefix = "ppc" in {
def int_ppc_stwcx : GCCBuiltin<"__builtin_ppc_stwcx">,
Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty],
[IntrWriteMem]>;
def int_ppc_stbcx : Intrinsic<[llvm_i32_ty], [llvm_ptr_ty, llvm_i32_ty], [IntrWriteMem]>;
// compare
def int_ppc_cmpeqb
: GCCBuiltin<"__builtin_ppc_cmpeqb">,
Expand Down
2 changes: 2 additions & 0 deletions llvm/lib/Target/PowerPC/PPCInstrInfo.td
Expand Up @@ -5445,3 +5445,5 @@ def : Pat<(int_ppc_fctudz f64:$A),
(XSCVDPUXDS $A)>;
def : Pat<(int_ppc_fctuwz f64:$A),
(XSCVDPUXWS $A)>;
def : Pat<(int_ppc_stbcx xoaddr:$dst, gprc:$A),
(STBCX gprc:$A, xoaddr:$dst)>;

0 comments on commit 09df619

Please sign in to comment.