Something went wrong. Try again.
🌱 A minimal programming language and compiler. git.urbach.dev/cli/q
high-performance programming-language compiler
Something went wrong. Try again.
1234567891011121314151617181920212223242526package codegen
import ( "slices"
"git.urbach.dev/cli/q/src/asm" "git.urbach.dev/cli/q/src/ssa")
func (f *Function) executeCas(step *Step, instr *ssa.Cas) { address := f.ValueToStep[instr.Arguments[0]] oldValue := f.ValueToStep[instr.Arguments[1]] newValue := f.ValueToStep[instr.Arguments[2]] live := slices.Concat(step.Live, []*Step{address, oldValue, newValue}) addressRegister := f.resolveOperand(address, live) oldValueRegister := f.resolveOperand(oldValue, live, addressRegister) newValueRegister := f.resolveOperand(newValue, live, addressRegister, oldValueRegister) oldValueRegister = f.arch.casOldValue(f, oldValueRegister)
f.Assembler.Append(&asm.CompareAndSwap{ OldValue: oldValueRegister, NewValue: newValueRegister, Address: addressRegister, Length: 8, })}