Many Millfork constructs generate labels. Knowing what they mean can be useful when reading the generated assembly code.
Every generated label is of form .xx__11111
where 11111
is a sequential number and xx
is the type:
-
ah
– optimized addition of carry -
an
– logical conjunction short-circuiting -
bc
– array bounds checking (-fbounds-checking
) -
bo
– boolean type conversions -
c8
– constant#8
forBIT
when immediate addressing is not available -
co
– greater-than comparison -
cp
– equality comparison for larger types -
dd
– labels renamed by code deduplication -
de
– decrement for larger types -
do
– beginning of ado-while
statement -
ds
– decimal right shift operation -
dv
– division and modulo operations -
el
– beginning of the "else" block in anif
statement -
ew
– end of awhile
statement -
fi
– end of anif
statement -
fe
– body of anfor
statement over a list -
fo
– certain optimizedfor
loops -
he
– beginning of the body of awhile
statement -
in
– increment for larger types -
is
– optimized addition of carry using undocumented instructions -
lj
– extra labels generated when converting invalid short jumps to long jumps -
me
– start of afor
loop doing bulk memory operations -
ms
– bulk memory operations -
no
– nonet to word extension caused by thenonet
operator -
od
– end of ado-while
statement -
or
– logical alternative short-circuiting -
sx
– sign extension, from a smaller signed type to a larger type -
th
– beginning of the "then" block in anif
statement -
to
– end of afor-to
loop -
ur
– a copy due to loop unrolling -
wh
– beginning of awhile
statement -
xc
– automatically extracted subroutine of commonly repeating code