import LIB/default-templates-stackvariable.lm; fragment template::push := λ: DontChain(: src Constructor+Sized+FieldsSized). (: ( (.program( (for wsz in (range( '0 (/( (-( (-( (.expression struct-size) (.expression fields-size) )) '8 )) '8 )) )) ( \t 'pushq \s '$0 \n )) (.program src) \t 'pushq \s '$ 'case-number \n )) ) StackVariable); fragment template::mov := λ: DontChain(: src Constructor+Sized+FieldsSized)(: dst LocalVariable). (: ( (.program( (for wsz in (range( '0 (/( (-( (-( (.expression struct-size) (.expression fields-size) )) '8 )) '8 )) )) ( \t 'pushq \s '$0 \n )) (.program src) \t 'pushq \s '$ 'case-number \n (for index in (range( 0 (/( (.expression struct-size) '8 )) )) ( \t 'popq \s (+( (.expression dst) (*( '8 (.expression index) )) )) \[ '%RBP \] \n )) )) ) Nil); fragment template::mov := λ: DontChain(: src Constructor+Sized+FieldsSized)(: dst GlobalVariable). (: ( (.program( (for wsz in (range( '0 (/( (-( (-( (.expression struct-size) (.expression fields-size) )) '8 )) '8 )) )) ( \t 'pushq \s '$0 \n )) (.program src) \t 'pushq \s '$ 'case-number \n \t 'movq \s '$ (.expression dst) , \s '%R15 \n (for index in (range( 0 (/( (.expression struct-size) '8 )) )) ( \t 'popq \s (*( '8 (.expression index) )) \[ '%R15 \] \n )) )) ) Nil); fragment .0 := λ(: src Constant). (: ( (.program( \t 'mov \s '$ (.expression src) , \s '%RAX \n )) (.expression( 'RAX )) ) U64+Reg64); fragment .0 := λ(: src LocalVariable). (: ( (.program( \t 'mov \s (.expression src) \[ '%RBP \] , \s '%RAX \n )) (.expression( 'RAX )) ) U64+Reg64); fragment .0 := λ(: src GlobalVariable). (: ( (.program( \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s '0 \[ '%R15 \] , \s '%RAX \n )) (.expression( 'RAX )) ) U64+Reg64); fragment .0 := λ(: src LocalVariable+Fields>>). (: ( (.program( \t 'mov \s (.expression src) \[ '%RBP \] , \s '%AL \n )) (.expression( 'AL )) ) f0+Reg8); fragment .0 := λ(: src LocalVariable+Fields>>). (: ( (.program( \t 'mov \s (.expression src) \[ '%RBP \] , \s '%AX \n )) (.expression( 'AX )) ) f0+Reg16); fragment .0 := λ(: src LocalVariable+Fields>>). (: ( (.program( \t 'mov \s (.expression src) \[ '%RBP \] , \s '%EAX \n )) (.expression( 'EAX )) ) f0+Reg32); fragment .0 := λ(: src LocalVariable+Fields>>). (: ( (.program( \t 'mov \s (.expression src) \[ '%RBP \] , \s '%RAX \n )) (.expression( 'RAX )) ) f0+Reg64); fragment .0 := λ(: src LocalVariable+Fields>>>). (: ( (.program( (for index in (range( 0 (/( (.expression size0) '8 )) )) ( (let word-offset (-( (-( (+( (.expression src) (.expression size0) )) (*( (.expression index) '8 )) )) '8 )) ) \t 'pushq \s (.expression word-offset) \[ '%RBP \] \n )) )) ) f0+StackVariable); fragment .tag := λ(: src LocalVariable+Fields>>). (: ( (.program( \t 'mov \s (.expression src) \[ '%RBP \] , \s '%AL \n )) (.expression( 'AL )) ) f0+Reg8); fragment .tag := λ(: src LocalVariable+Fields>>). (: ( (.program( \t 'mov \s (.expression src) \[ '%RBP \] , \s '%AX \n )) (.expression( 'AX )) ) f0+Reg16); fragment .tag := λ(: src LocalVariable+Fields>>). (: ( (.program( \t 'mov \s (.expression src) \[ '%RBP \] , \s '%EAX \n )) (.expression( 'EAX )) ) f0+Reg32); fragment .tag := λ(: src LocalVariable+Fields>>). (: ( (.program( \t 'mov \s (.expression src) \[ '%RBP \] , \s '%RAX \n )) (.expression( 'RAX )) ) f0+Reg64); fragment .tag := λ(: src LocalVariable+Fields>>>). (: ( (.program( (for index in (range( 0 (/( (.expression size0) '8 )) )) ( (let word-offset (-( (-( (+( (.expression src) (.expression size0) )) (*( (.expression index) '8 )) )) '8 )) ) \t 'pushq \s (.expression word-offset) \[ '%RBP \] \n )) )) ) f0+StackVariable); fragment .1 := λ(: src LocalVariable+Fields>,Sized>>). (: ( (.program( \t 'mov \s (+( (.expression src) (.expression size0) )) \[ '%RBP \] , \s '%AL \n )) (.expression( 'AL )) ) f1+Reg8); fragment .1 := λ(: src LocalVariable+Fields>,Sized>>). (: ( (.program( \t 'mov \s (+( (.expression src) (.expression size0) )) \[ '%RBP \] , \s '%AX \n )) (.expression( 'AX )) ) f1+Reg16); fragment .1 := λ(: src LocalVariable+Fields>,Sized>>). (: ( (.program( \t 'mov \s (+( (.expression src) (.expression size0) )) \[ '%RBP \] , \s '%EAX \n )) (.expression( 'EAX )) ) f1+Reg32); fragment .1 := λ(: src LocalVariable+Fields>,Sized>>). (: ( (.program( \t 'mov \s (+( (.expression src) (.expression size0) )) \[ '%RBP \] , \s '%RAX \n )) (.expression( 'RAX )) ) f1+Reg64); fragment .1 := λ(: src LocalVariable+Fields>>,Sized>>). (: ( (.program( (for index in (range( 0 (/( (.expression size1) '8 )) )) ( (let word-offset (-( (+( (-( (+( (.expression src) (.expression size1) )) (*( (.expression index) '8 )) )) (align(.expression size0)) )) '8 )) ) \t 'pushq \s (.expression word-offset) \[ '%RBP \] \n )) )) ) f1+StackVariable); fragment .2 := λ(: src LocalVariable+Fields>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (.expression src) (align( (.expression size1) )) ))) \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%RBP \] , \s '%AL \n )) (.expression( 'AL )) ) f2+Reg8); fragment .2 := λ(: src LocalVariable+Fields>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (.expression src) (align( (.expression size1) )) ))) \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%RBP \] , \s '%AX \n )) (.expression( 'AX )) ) f2+Reg16); fragment .2 := λ(: src LocalVariable+Fields>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (.expression src) (align( (.expression size1) )) ))) \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%RBP \] , \s '%EAX \n )) (.expression( 'EAX )) ) f2+Reg32); fragment .2 := λ(: src LocalVariable+Fields>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (.expression src) (align( (.expression size1) )) ))) \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%RBP \] , \s '%RAX \n )) (.expression( 'RAX )) ) f2+Reg64); fragment .2 := λ(: src LocalVariable+Fields>>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (.expression src) (align( (.expression size1) )) ))) (for index in (range( 0 (/( (.expression size2) '8 )) )) ( (let word-offset (-( (+( (-( (+( (.expression base-offset) (.expression size2) )) (*( (.expression index) '8 )) )) (align(.expression size0)) )) '8 )) ) \t 'pushq \s (.expression word-offset) \[ '%RBP \] \n )) )) ) f2+StackVariable); fragment .3 := λ(: src LocalVariable+Fields>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (.expression src) (align( (.expression size1) )) )) (align( (.expression size2) )) ))) \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%RBP \] , \s '%AL \n )) (.expression( 'AL )) ) f3+Reg8); fragment .3 := λ(: src LocalVariable+Fields>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (.expression src) (align( (.expression size1) )) )) (align( (.expression size2) )) ))) \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%RBP \] , \s '%AX \n )) (.expression( 'AX )) ) f3+Reg16); fragment .3 := λ(: src LocalVariable+Fields>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (.expression src) (align( (.expression size1) )) )) (align( (.expression size2) )) ))) \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%RBP \] , \s '%EAX \n )) (.expression( 'EAX )) ) f3+Reg32); fragment .3 := λ(: src LocalVariable+Fields>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (.expression src) (align( (.expression size1) )) )) (align( (.expression size2) )) ))) \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%RBP \] , \s '%RAX \n )) (.expression( 'RAX )) ) f3+Reg64); fragment .3 := λ(: src LocalVariable+Fields>>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (.expression src) (align( (.expression size1) )) )) (align( (.expression size2) )) ))) (for index in (range( 0 (/( (.expression size3) '8 )) )) ( (let word-offset (-( (+( (-( (+( (.expression base-offset) (.expression size3) )) (*( (.expression index) '8 )) )) (align(.expression size0)) )) '8 )) ) \t 'pushq \s (.expression word-offset) \[ '%RBP \] \n )) )) ) f3+StackVariable); fragment .4 := λ(: src LocalVariable+Fields>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( (.expression src) (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) ))) \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%RBP \] , \s '%AL \n )) (.expression( 'AL )) ) f4+Reg8); fragment .4 := λ(: src LocalVariable+Fields>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( (.expression src) (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) ))) \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%RBP \] , \s '%AX \n )) (.expression( 'AX )) ) f4+Reg16); fragment .4 := λ(: src LocalVariable+Fields>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( (.expression src) (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) ))) \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%RBP \] , \s '%EAX \n )) (.expression( 'EAX )) ) f4+Reg32); fragment .4 := λ(: src LocalVariable+Fields>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( (.expression src) (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) ))) \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%RBP \] , \s '%RAX \n )) (.expression( 'RAX )) ) f4+Reg64); fragment .4 := λ(: src LocalVariable+Fields>>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( (.expression src) (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) ))) (for index in (range( 0 (/( (.expression size4) '8 )) )) ( (let word-offset (-( (+( (-( (+( (.expression base-offset) (.expression size4) )) (*( (.expression index) '8 )) )) (align(.expression size0)) )) '8 )) ) \t 'pushq \s (.expression word-offset) \[ '%RBP \] \n )) )) ) f4+StackVariable); fragment .5 := λ(: src LocalVariable+Fields>,Sized>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( (+( (.expression src) (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) )) (align( (.expression size4) )) ))) \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%RBP \] , \s '%AL \n )) (.expression( 'AL )) ) f5+Reg8); fragment .5 := λ(: src LocalVariable+Fields>,Sized>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( (+( (.expression src) (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) )) (align( (.expression size4) )) ))) \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%RBP \] , \s '%AX \n )) (.expression( 'AX )) ) f5+Reg16); fragment .5 := λ(: src LocalVariable+Fields>,Sized>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( (+( (.expression src) (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) )) (align( (.expression size4) )) ))) \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%RBP \] , \s '%EAX \n )) (.expression( 'EAX )) ) f5+Reg32); fragment .5 := λ(: src LocalVariable+Fields>,Sized>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( (+( (.expression src) (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) )) (align( (.expression size4) )) ))) \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%RBP \] , \s '%RAX \n )) (.expression( 'RAX )) ) f5+Reg64); fragment .5 := λ(: src LocalVariable+Fields>>,Sized>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( (+( (.expression src) (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) )) (align( (.expression size4) )) ))) (for index in (range( 0 (/( (.expression size5) '8 )) )) ( (let word-offset (-( (+( (-( (+( (.expression base-offset) (.expression size5) )) (*( (.expression index) '8 )) )) (align(.expression size0)) )) '8 )) ) \t 'pushq \s (.expression word-offset) \[ '%RBP \] \n )) )) ) f5+StackVariable); fragment .0 := λ(: src GlobalVariable+Fields>>). (: ( (.program( \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s '0 \[ '%R15 \] , \s '%AL \n )) (.expression( 'AL )) ) f0+Reg8); fragment .0 := λ(: src GlobalVariable+Fields>>). (: ( (.program( \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s '0 \[ '%R15 \] , \s '%AX \n )) (.expression( 'AX )) ) f0+Reg16); fragment .0 := λ(: src GlobalVariable+Fields>>). (: ( (.program( \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s '0 \[ '%R15 \] , \s '%EAX \n )) (.expression( 'EAX )) ) f0+Reg32); fragment .0 := λ(: src GlobalVariable+Fields>>). (: ( (.program( \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s '0 \[ '%R15 \] , \s '%RAX \n )) (.expression( 'RAX )) ) f0+Reg64); fragment .0 := λ(: src GlobalVariable+Fields>>>). (: ( (.program( \t 'mov \s '$ (.expression src) , \s '%R15 \n (for index in (range( 0 (/( (.expression size0) '8 )) )) ( (let word-offset (-( (-( (.expression size0) (*( (.expression index) '8 )) )) '8 )) ) \t 'pushq \s (.expression word-offset) \[ '%R15 \] \n )) )) ) f0+StackVariable); fragment .tag := λ(: src GlobalVariable+Fields>>). (: ( (.program( \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s '0 \[ '%R15 \] , \s '%AL \n )) (.expression( 'AL )) ) f0+Reg8); fragment .tag := λ(: src GlobalVariable+Fields>>). (: ( (.program( \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s '0 \[ '%R15 \] , \s '%AX \n )) (.expression( 'AX )) ) f0+Reg16); fragment .tag := λ(: src GlobalVariable+Fields>>). (: ( (.program( \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s '0 \[ '%R15 \] , \s '%EAX \n )) (.expression( 'EAX )) ) f0+Reg32); fragment .tag := λ(: src GlobalVariable+Fields>>). (: ( (.program( \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s '0 \[ '%R15 \] , \s '%RAX \n )) (.expression( 'RAX )) ) f0+Reg64); fragment .tag := λ(: src GlobalVariable+Fields>>>). (: ( (.program( \t 'mov \s '$ (.expression src) , \s '%R15 \n (for index in (range( 0 (/( (.expression size0) '8 )) )) ( (let word-offset (-( (-( (.expression size0) (*( (.expression index) '8 )) )) '8 )) ) \t 'pushq \s (.expression word-offset) \[ '%R15 \] \n )) )) ) f0+StackVariable); fragment .1 := λ(: src GlobalVariable+Fields>,Sized>>). (: ( (.program( \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( '0 (.expression size0) )) \[ '%R15 \] , \s '%AL \n )) (.expression( 'AL )) ) f1+Reg8); fragment .1 := λ(: src GlobalVariable+Fields>,Sized>>). (: ( (.program( \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( '0 (.expression size0) )) \[ '%R15 \] , \s '%AX \n )) (.expression( 'AX )) ) f1+Reg16); fragment .1 := λ(: src GlobalVariable+Fields>,Sized>>). (: ( (.program( \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( '0 (.expression size0) )) \[ '%R15 \] , \s '%EAX \n )) (.expression( 'EAX )) ) f1+Reg32); fragment .1 := λ(: src GlobalVariable+Fields>,Sized>>). (: ( (.program( \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( '0 (.expression size0) )) \[ '%R15 \] , \s '%RAX \n )) (.expression( 'RAX )) ) f1+Reg64); fragment .1 := λ(: src GlobalVariable+Fields>>,Sized>>). (: ( (.program( \t 'mov \s '$ (.expression src) , \s '%R15 \n (for index in (range( 0 (/( (.expression size1) '8 )) )) ( (let word-offset (-( (+( (-( (+( '0 (.expression size1) )) (*( (.expression index) '8 )) )) (align(.expression size0)) )) '8 )) ) \t 'pushq \s (.expression word-offset) \[ '%R15 \] \n )) )) ) f1+StackVariable); fragment .2 := λ(: src GlobalVariable+Fields>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( '0 (align( (.expression size1) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%R15 \] , \s '%AL \n )) (.expression( 'AL )) ) f2+Reg8); fragment .2 := λ(: src GlobalVariable+Fields>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( '0 (align( (.expression size1) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%R15 \] , \s '%AX \n )) (.expression( 'AX )) ) f2+Reg16); fragment .2 := λ(: src GlobalVariable+Fields>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( '0 (align( (.expression size1) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%R15 \] , \s '%EAX \n )) (.expression( 'EAX )) ) f2+Reg32); fragment .2 := λ(: src GlobalVariable+Fields>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( '0 (align( (.expression size1) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%R15 \] , \s '%RAX \n )) (.expression( 'RAX )) ) f2+Reg64); fragment .2 := λ(: src GlobalVariable+Fields>>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( '0 (align( (.expression size1) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n (for index in (range( 0 (/( (.expression size2) '8 )) )) ( (let word-offset (-( (+( (-( (+( (.expression base-offset) (.expression size2) )) (*( (.expression index) '8 )) )) (align(.expression size0)) )) '8 )) ) \t 'pushq \s (.expression word-offset) \[ '%R15 \] \n )) )) ) f2+StackVariable); fragment .3 := λ(: src GlobalVariable+Fields>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( '0 (align( (.expression size1) )) )) (align( (.expression size2) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%R15 \] , \s '%AL \n )) (.expression( 'AL )) ) f3+Reg8); fragment .3 := λ(: src GlobalVariable+Fields>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( '0 (align( (.expression size1) )) )) (align( (.expression size2) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%R15 \] , \s '%AX \n )) (.expression( 'AX )) ) f3+Reg16); fragment .3 := λ(: src GlobalVariable+Fields>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( '0 (align( (.expression size1) )) )) (align( (.expression size2) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%R15 \] , \s '%EAX \n )) (.expression( 'EAX )) ) f3+Reg32); fragment .3 := λ(: src GlobalVariable+Fields>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( '0 (align( (.expression size1) )) )) (align( (.expression size2) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%R15 \] , \s '%RAX \n )) (.expression( 'RAX )) ) f3+Reg64); fragment .3 := λ(: src GlobalVariable+Fields>>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( '0 (align( (.expression size1) )) )) (align( (.expression size2) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n (for index in (range( 0 (/( (.expression size3) '8 )) )) ( (let word-offset (-( (+( (-( (+( (.expression base-offset) (.expression size3) )) (*( (.expression index) '8 )) )) (align(.expression size0)) )) '8 )) ) \t 'pushq \s (.expression word-offset) \[ '%R15 \] \n )) )) ) f3+StackVariable); fragment .4 := λ(: src GlobalVariable+Fields>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( '0 (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%R15 \] , \s '%AL \n )) (.expression( 'AL )) ) f4+Reg8); fragment .4 := λ(: src GlobalVariable+Fields>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( '0 (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%R15 \] , \s '%AX \n )) (.expression( 'AX )) ) f4+Reg16); fragment .4 := λ(: src GlobalVariable+Fields>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( '0 (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%R15 \] , \s '%EAX \n )) (.expression( 'EAX )) ) f4+Reg32); fragment .4 := λ(: src GlobalVariable+Fields>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( '0 (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%R15 \] , \s '%RAX \n )) (.expression( 'RAX )) ) f4+Reg64); fragment .4 := λ(: src GlobalVariable+Fields>>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( '0 (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) ))) (for index in (range( 0 (/( (.expression size4) '8 )) )) ( (let word-offset (-( (+( (-( (+( (.expression base-offset) (.expression size4) )) (*( (.expression index) '8 )) )) (align(.expression size0)) )) '8 )) ) \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'pushq \s (.expression word-offset) \[ '%R15 \] \n )) )) ) f4+StackVariable); fragment .5 := λ(: src GlobalVariable+Fields>,Sized>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( (+( '0 (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) )) (align( (.expression size4) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%R15 \] , \s '%AL \n )) (.expression( 'AL )) ) f5+Reg8); fragment .5 := λ(: src GlobalVariable+Fields>,Sized>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( (+( '0 (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) )) (align( (.expression size4) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%R15 \] , \s '%AX \n )) (.expression( 'AX )) ) f5+Reg16); fragment .5 := λ(: src GlobalVariable+Fields>,Sized>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( (+( '0 (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) )) (align( (.expression size4) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%R15 \] , \s '%EAX \n )) (.expression( 'EAX )) ) f5+Reg32); fragment .5 := λ(: src GlobalVariable+Fields>,Sized>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( (+( '0 (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) )) (align( (.expression size4) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n \t 'mov \s (+( (.expression base-offset) (.expression size0) )) \[ '%R15 \] , \s '%RAX \n )) (.expression( 'RAX )) ) f5+Reg64); fragment .5 := λ(: src GlobalVariable+Fields>>,Sized>,Sized>,Sized>,Sized>,Sized>>). (: ( (.program( (let base-offset (+( (+( (+( (+( '0 (align( (.expression size1) )) )) (align( (.expression size2) )) )) (align( (.expression size3) )) )) (align( (.expression size4) )) ))) \t 'mov \s '$ (.expression src) , \s '%R15 \n (for index in (range( 0 (/( (.expression size5) '8 )) )) ( (let word-offset (-( (+( (-( (+( (.expression base-offset) (.expression size5) )) (*( (.expression index) '8 )) )) (.expression size0) )) '8 )) ) \t 'pushq \s (.expression word-offset) \[ '%R15 \] \n )) )) ) f5+StackVariable);