On Wed, 18 May 2022 15:05:26 GMT, Jorn Vernee <jver...@openjdk.org> wrote:
>> It's not quite that simple since a binding recipe for a single parameter can >> have multiple VMStores for instance if a struct is decomposed into multiple >> values. >> >> It can be done by pulling the binding loops up to the `specialize` method, >> and have if statements for VMStore and VMLoad, like this: >> >> for (Binding binding : callingSequence.argumentBindings(i)) { >> if (binding instanceof Binding.VMStore vms && >> callingSequence.forDowncall()) { >> emitSetOutput(vms.type()); >> } else if (binding instanceof Binding.VMLoad && >> callingSequence.forUpcall()) { >> emitGetInput(); >> } else { >> doBinding(binding); >> } >> } >> >> And for returns: >> >> for (Binding binding : callingSequence.returnBindings()) { >> if (binding instanceof Binding.VMLoad vml && >> callingSequence.forDowncall()) { >> if (!callingSequence.needsReturnBuffer()) { >> emitRestoreReturnValue(vml.type()); >> } else { >> emitReturnBufferLoad(vml); >> } >> } else if (binding instanceof Binding.VMStore vms && >> callingSequence.forUpcall()) { >> if (!callingSequence.needsReturnBuffer()) { >> emitSaveReturnValue(vms.type()); >> } else { >> emitReturnBufferStore(vms); >> } >> } else { >> doBinding(binding); >> } >> } >> >> But, maybe that's better? > > I think someone might look at this and think "why aren't these bindings > handled by `doBinding`"? Let's leave it as is for the time being. I guess what I'm trying to get at is to try and make the code more explicit - but that is hard, given the constraints. ------------- PR: https://git.openjdk.java.net/jdk/pull/8685