Module: dfmc-native-harp-cg Author: Nosa Omo Copyright: Original Code is Copyright (c) 1995-2004 Functional Objects, Inc. All rights reserved. License: Functional Objects Library Public License Version 1.0 Dual-license: GNU Lesser General Public License Warranty: Distributed WITHOUT WARRANTY OF ANY KIND define sideways method stack-arguments-set-up (back-end :: , arguments :: ) => () for (index :: from arguments.size - 1 to back-end.registers.arguments-passed-in-registers by -1) ins--push(back-end, arguments[index]); end for; end method stack-arguments-set-up; define sideways method register-arguments-set-up (back-end :: , arguments :: ) => (arguments :: ) let arguments-passed-in-registers :: = arguments-in-registers(back-end, arguments); for (index :: from 0 below arguments-passed-in-registers) let argument = arguments[index]; select(argument by instance?) , => ins--fmove(back-end, back-end.registers.reg-float-machine-arguments[index], argument); , => ins--dmove(back-end, back-end.registers.reg-float-machine-arguments[index], argument); otherwise => ins--move(back-end, back-end.registers.reg-machine-arguments[index], argument); end select; end for; copy-sequence(arguments, start: arguments-passed-in-registers); end method register-arguments-set-up; define sideways method arguments-set-up (back-end :: , c :: , args :: ) => (arguments :: ) if (c.optional-arguments?) // args contains at least #rest value let no-of-stack-alloc-args = arguments-on-stack(back-end, args); let stacked-vector-size = stack-vector-size(back-end, c); let stack-alloc-count = bytes%(back-end, 1 + no-of-stack-alloc-args + stacked-vector-size); let pad-size = argument-register-padding(back-end, args.size); let padding = if (pad-size == 0) #() else make(, size: pad-size, fill: $false); end; concatenate(args, padding, list(stack-alloc-count)); else args; end if; end method arguments-set-up;