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

Reply via email to