export function w $ifmv(w %p1, w %p2, w %p3) { @start @entry %rt =w add %p2, %p3 # gcm moves to @true %rf =w sub %p2, %p3 # gcm moves to @false jnz %p1, @true, @false @true %r =w copy %rt jmp @exit @false %r =w copy %rf jmp @exit @exit ret %r } export function w $hoist1(w %p1, w %p2, w %p3) { @start @entry %n =w copy 0 %i =w copy %p1 @loop %base =w add %p2, %p3 # gcm moves to @exit %i =w sub %i, 1 %n =w add %n, 1 jnz %i, @loop, @exit @exit %r =w add %base, %n ret %r } export function w $hoist2(w %p1, w %p2, w %p3) { @start @entry %n =w copy 0 %i =w copy %p1 @loop %base =w add %p2, %p3 # gcm moves to @entry %i =w sub %i, 1 %n =w add %n, %base jnz %i, @loop, @exit @exit %r =w add %base, %n ret %r }