Skip to content

Latest commit

 

History

History
38 lines (21 loc) · 2.06 KB

iii.3.11-ble.un.length.md

File metadata and controls

38 lines (21 loc) · 2.06 KB

III.3.11 ble.un.<length> – branch on less than or equal to, unsigned or unordered

Format Assembly Format Description
43 <int32> ble.un target Branch to target if less than or equal to (unsigned or unordered).
36 <int8> ble.un.s target Branch to target if less than or equal to (unsigned or unordered), short form.

Stack Transition:

…, value1, value2 → …

Description:

The ble.un instruction transfers control to target if value1 is less than or equal to value2, when compared unsigned (for integer values) or unordered (for floating-point values).

target is represented as a signed offset (4 bytes for ble.un, 1 byte for ble.un.s) from the beginning of the instruction following the current instruction.

The effect of a ble.un target instruction is identical to:

  • If stack operands are integers, then cgt.un followed by a brfalse target

  • If stack operands are floating-point, then cgt followed by a brfalse target

The acceptable operand types are encapsulated in Table 4: Binary Comparison or Branch Operations.

If the target instruction has one or more prefix codes, control can only be transferred to the first of these prefixes. Control transfers into and out of try, catch, filter, and finally blocks cannot be performed by this instruction. (Such transfers are severely restricted and shall use the leave instruction instead; see Partition I for details).

Exceptions:

None.

Correctness:

Correct CIL shall observe all of the control transfer rules specified above and shall guarantee that the top two items on the stack correspond to the types shown in Table 4: Binary Comparison or Branch Operations.

Verifiability:

Verifiable code requires the type-consistency of the stack, locals and arguments for every possible path to the destination instruction. See §III.1.8 for more details.