as: MMIX-Expand
1
1 9.28.2 Instruction expansion
1 ----------------------------
1
1 When 'as' encounters an instruction with an operand that is either not
1 known or does not fit the operand size of the instruction, 'as' (and
1 'ld') will expand the instruction into a sequence of instructions
1 semantically equivalent to the operand fitting the instruction.
1 Expansion will take place for the following instructions:
1
1 'GETA'
1 Expands to a sequence of four instructions: 'SETL', 'INCML',
1 'INCMH' and 'INCH'. The operand must be a multiple of four.
1 Conditional branches
1 A branch instruction is turned into a branch with the complemented
1 condition and prediction bit over five instructions; four
1 instructions setting '$255' to the operand value, which like with
1 'GETA' must be a multiple of four, and a final 'GO $255,$255,0'.
1 'PUSHJ'
1 Similar to expansion for conditional branches; four instructions
1 set '$255' to the operand value, followed by a 'PUSHGO
1 $255,$255,0'.
1 'JMP'
1 Similar to conditional branches and 'PUSHJ'. The final instruction
1 is 'GO $255,$255,0'.
1
1 The linker 'ld' is expected to shrink these expansions for code
1 assembled with '--relax' (though not currently implemented).
1