[LLVMdev] Implementing llvm.atomic.cmp.swap.i32 on PowerPC
Gary Benson
gbenson at redhat.com
Mon Jun 30 06:10:23 PDT 2008
Chris Lattner wrote:
> On Jun 27, 2008, at 8:27 AM, Gary Benson wrote:
> > def CMP_UNRESw : Pseudo<(outs), (ins GPRC:$rA, GPRC:$rB, i32imm:
> > $label),
> > "cmpw $rA, $rB\n\tbne- La${label}_exit",
> > [(PPCcmp_unres GPRC:$rA, GPRC:$rB, imm:
> > $label)]>;
> > }
> >
> > ...and I can't figure out the syntax for that. Any suggestions?
>
> You have to write custom encoding logic in C++ for this. This
> should go in PPCCodeEmitter::emitBasicBlock. I admit this isn't
> very elegant. A better solution would be to fix the lowering to
> produce two instructions instead of this pseudo instruction.
Hi Chris,
I'd prefer to fix the lowering if possible; the pseudo instructions
are only used in three places, so it shouldn't be a huge change.
I need to generate labels in PPCTargetLowering::LowerAtomicCMP_SWAP
however: how do I do that? FWIW the code it needs to emit is:
; inputs: ptr, oldval, newval
loop:
lwarx $tmp, 0, $ptr
cmpw $oldval, $tmp
bne- exit
stwcx. $newval, 0, $ptr
bne- loop
exit:
...
Cheers,
Gary
--
http://gbenson.net/
More information about the llvm-dev
mailing list