fragment : DontChain template::push := λ(: src Sized<size>). (: (
(.program(
(for wsz in (range( '0 (/( (-( (-( (.expression return-size) (.expression size) )) '8 )) '8 )) )) (
\t 'pushq \s '$0 \n
))
(.program src)
\t 'pushq \s '$ 'case-number \n
))
) Sized<return-size>);
fragment : DontChain template::mov := λ(: src Sized<size>)(: dst LocalVariable). (: (
(.program(
(.program src)
(for index in (range( 0 (/( (.expression size) '8 )) )) (
\t 'popq \s (+( (.expression dst) (*( '8 (.expression index) )) )) \[ '%rbp \] \n
))
))
) Nil);
fragment : DontChain template::mov := λ(: src Sized<size>)(: dst GlobalVariable). (: (
(.program(
(.program src)
\t 'movq \s '$ (.expression dst) , \s '%r15 \n
(for index in (range( 0 (/( (.expression size) '8 )) )) (
\t 'popq \s (*( '8 (.expression index) )) \[ '%r15 \] \n
))
))
) Nil);
fragment : DontChain .0 := λ(: src Constant). (: (
(.program(
\t 'mov \s '$ (.expression src) , \s '%rax \n
))
(.expression( 'rax ))
) U64+Reg64);
fragment : DontChain .0 := λ(: src LocalVariable). (: (
(.program(
\t 'mov \s (.expression src) \[ '%rbp \] , \s '%rax \n
))
(.expression( 'rax ))
) U64+Reg64);
fragment : DontChain .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 : DontChain .0 := λ(: src LocalVariable+Fields<Cons<_,f0+Sized<1>>>). (: (
(.program(
\t 'mov \s (.expression src) \[ '%rbp \] , \s '%al \n
))
(.expression( 'al ))
) f0+Reg8);
fragment : DontChain .0 := λ(: src LocalVariable+Fields<Cons<_,f0+Sized<2>>>). (: (
(.program(
\t 'mov \s (.expression src) \[ '%rbp \] , \s '%ax \n
))
(.expression( 'ax ))
) f0+Reg16);
fragment : DontChain .0 := λ(: src LocalVariable+Fields<Cons<_,f0+Sized<4>>>). (: (
(.program(
\t 'mov \s (.expression src) \[ '%rbp \] , \s '%eax \n
))
(.expression( 'eax ))
) f0+Reg32);
fragment : DontChain .0 := λ(: src LocalVariable+Fields<Cons<_,f0+Sized<8>>>). (: (
(.program(
\t 'mov \s (.expression src) \[ '%rbp \] , \s '%rax \n
))
(.expression( 'rax ))
) f0+Reg64);
fragment : DontChain .0 := λ(: src LocalVariable+Fields<Cons<_,f0+Sized<size0+GT<8>>>>). (: (
(.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 : DontChain .1 := λ(: src LocalVariable+Fields<Cons<Cons<_,f1+Sized<1>>,Sized<size0>>>). (: (
(.program(
\t 'mov \s (+( (.expression src) (.expression size0) )) \[ '%rbp \] , \s '%al \n
))
(.expression( 'al ))
) f1+Reg8);
fragment : DontChain .1 := λ(: src LocalVariable+Fields<Cons<Cons<_,f1+Sized<2>>,Sized<size0>>>). (: (
(.program(
\t 'mov \s (+( (.expression src) (.expression size0) )) \[ '%rbp \] , \s '%ax \n
))
(.expression( 'ax ))
) f1+Reg16);
fragment : DontChain .1 := λ(: src LocalVariable+Fields<Cons<Cons<_,f1+Sized<4>>,Sized<size0>>>). (: (
(.program(
\t 'mov \s (+( (.expression src) (.expression size0) )) \[ '%rbp \] , \s '%eax \n
))
(.expression( 'eax ))
) f1+Reg32);
fragment : DontChain .1 := λ(: src LocalVariable+Fields<Cons<Cons<_,f1+Sized<8>>,Sized<size0>>>). (: (
(.program(
\t 'mov \s (+( (.expression src) (.expression size0) )) \[ '%rbp \] , \s '%rax \n
))
(.expression( 'rax ))
) f1+Reg64);
fragment : DontChain .1 := λ(: src LocalVariable+Fields<Cons<Cons<_,f1+Sized<size1+GT<8>>>,Sized<size0>>>). (: (
(.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 : DontChain .2 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<_,f2+Sized<1>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .2 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<_,f2+Sized<2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .2 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<_,f2+Sized<4>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .2 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<_,f2+Sized<8>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .2 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<_,f2+Sized<size2+GT<8>>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .3 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<Cons<_,f3+Sized<1>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .3 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<Cons<_,f3+Sized<2>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .3 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<Cons<_,f3+Sized<4>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .3 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<Cons<_,f3+Sized<8>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .3 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<Cons<_,f3+Sized<size3+GT<8>>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .4 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<Cons<Cons<_,f4+Sized<1>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .4 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<Cons<Cons<_,f4+Sized<2>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .4 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<Cons<Cons<_,f4+Sized<4>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .4 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<Cons<Cons<_,f4+Sized<8>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .4 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<Cons<Cons<_,f4+Sized<size4+GT<8>>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .5 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<Cons<Cons<Cons<_,f5+Sized<1>>,Sized<size4>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .5 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<Cons<Cons<Cons<_,f5+Sized<2>>,Sized<size4>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .5 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<Cons<Cons<Cons<_,f5+Sized<4>>,Sized<size4>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .5 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<Cons<Cons<Cons<_,f5+Sized<8>>,Sized<size4>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .5 := λ(: src LocalVariable+Fields<Cons<Cons<Cons<Cons<Cons<Cons<_,f5+Sized<size5+GT<8>>>,Sized<size4>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .0 := λ(: src GlobalVariable+Fields<Cons<_,f0+Sized<1>>>). (: (
(.program(
\t 'mov \s '$ (.expression src) , \s '%r15 \n
\t 'mov \s '0 \[ '%r15 \] , \s '%al \n
))
(.expression( 'al ))
) f0+Reg8);
fragment : DontChain .0 := λ(: src GlobalVariable+Fields<Cons<_,f0+Sized<2>>>). (: (
(.program(
\t 'mov \s '$ (.expression src) , \s '%r15 \n
\t 'mov \s '0 \[ '%r15 \] , \s '%ax \n
))
(.expression( 'ax ))
) f0+Reg16);
fragment : DontChain .0 := λ(: src GlobalVariable+Fields<Cons<_,f0+Sized<4>>>). (: (
(.program(
\t 'mov \s '$ (.expression src) , \s '%r15 \n
\t 'mov \s '0 \[ '%r15 \] , \s '%eax \n
))
(.expression( 'eax ))
) f0+Reg32);
fragment : DontChain .0 := λ(: src GlobalVariable+Fields<Cons<_,f0+Sized<8>>>). (: (
(.program(
\t 'mov \s '$ (.expression src) , \s '%r15 \n
\t 'mov \s '0 \[ '%r15 \] , \s '%rax \n
))
(.expression( 'rax ))
) f0+Reg64);
fragment : DontChain .0 := λ(: src GlobalVariable+Fields<Cons<_,f0+Sized<size0+GT<8>>>>). (: (
(.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 : DontChain .1 := λ(: src GlobalVariable+Fields<Cons<Cons<_,f1+Sized<1>>,Sized<size0>>>). (: (
(.program(
\t 'mov \s '$ (.expression src) , \s '%r15 \n
\t 'mov \s (+( '0 (.expression size0) )) \[ '%r15 \] , \s '%al \n
))
(.expression( 'al ))
) f1+Reg8);
fragment : DontChain .1 := λ(: src GlobalVariable+Fields<Cons<Cons<_,f1+Sized<2>>,Sized<size0>>>). (: (
(.program(
\t 'mov \s '$ (.expression src) , \s '%r15 \n
\t 'mov \s (+( '0 (.expression size0) )) \[ '%r15 \] , \s '%ax \n
))
(.expression( 'ax ))
) f1+Reg16);
fragment : DontChain .1 := λ(: src GlobalVariable+Fields<Cons<Cons<_,f1+Sized<4>>,Sized<size0>>>). (: (
(.program(
\t 'mov \s '$ (.expression src) , \s '%r15 \n
\t 'mov \s (+( '0 (.expression size0) )) \[ '%r15 \] , \s '%eax \n
))
(.expression( 'eax ))
) f1+Reg32);
fragment : DontChain .1 := λ(: src GlobalVariable+Fields<Cons<Cons<_,f1+Sized<8>>,Sized<size0>>>). (: (
(.program(
\t 'mov \s '$ (.expression src) , \s '%r15 \n
\t 'mov \s (+( '0 (.expression size0) )) \[ '%r15 \] , \s '%rax \n
))
(.expression( 'rax ))
) f1+Reg64);
fragment : DontChain .1 := λ(: src GlobalVariable+Fields<Cons<Cons<_,f1+Sized<size1+GT<8>>>,Sized<size0>>>). (: (
(.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 : DontChain .2 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<_,f2+Sized<1>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .2 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<_,f2+Sized<2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .2 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<_,f2+Sized<4>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .2 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<_,f2+Sized<8>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .2 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<_,f2+Sized<size2+GT<8>>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .3 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<Cons<_,f3+Sized<1>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .3 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<Cons<_,f3+Sized<2>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .3 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<Cons<_,f3+Sized<4>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .3 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<Cons<_,f3+Sized<8>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .3 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<Cons<_,f3+Sized<size3+GT<8>>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .4 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<Cons<Cons<_,f4+Sized<1>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .4 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<Cons<Cons<_,f4+Sized<2>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .4 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<Cons<Cons<_,f4+Sized<4>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .4 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<Cons<Cons<_,f4+Sized<8>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .4 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<Cons<Cons<_,f4+Sized<size4+GT<8>>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .5 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<Cons<Cons<Cons<_,f5+Sized<1>>,Sized<size4>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .5 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<Cons<Cons<Cons<_,f5+Sized<2>>,Sized<size4>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .5 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<Cons<Cons<Cons<_,f5+Sized<4>>,Sized<size4>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .5 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<Cons<Cons<Cons<_,f5+Sized<8>>,Sized<size4>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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 : DontChain .5 := λ(: src GlobalVariable+Fields<Cons<Cons<Cons<Cons<Cons<Cons<_,f5+Sized<size5+GT<8>>>,Sized<size4>>,Sized<size3>>,Sized<size2>>,Sized<size1>>,Sized<size0>>>). (: (
(.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);