3 This document describes changes to the Parrot ABI.
9 abs I, N - irregular operand mix
10 lcm N, I, I - duplicate of lcm I,I,I with float result
11 rand * - deprecated before 0.1.1
13 Internally handled opcodes:
15 All binary, unary, compare, and branch opcodes with evaluable constant
16 arguments are replaced with equivalent results of the opcode, e.g.
18 add I0, 10, 20 => set I0, 30
19 eq 10, 10, L1 => branch L1
20 ne 10, 10, L1 => gets deleted
21 iseq I0, "a", "a" => set I0, 1
23 Opcodes with mixed I and N source arguments are replaced to take
24 either a FLOATVAL constant or with a sequence of opcodes, e.g.:
26 add N0, N1, 1 => add N0, N1, 1.0
27 add N0, N1, I2 => set $N0, I2
29 sin N0, 2 => sin N0, 2.0
31 The compare and branch opcodes gt, ge, isgt, and isge for I, N, S
32 arguments are not emitted any more. They are replaced with their
33 counterparts with swapped arguments, e.g. :
35 gt I0, I1, L1 => lt I1, I0, L1
36 isge I0, 100, I2 => isle I0, I2, 100
39 While all these opcodes are valid to use, these are no more listed in
40 ops/ops.num nor generated. Compilers shouldn't emit these opcodes, as
41 it's slightly inefficient to create the equivalent opcodes.
45 The variables P0, P1, P2, S0 aren't visible in the called subroutine
46 anymore. See docs/pdds/pdd03_calling_conventions.pod.