.sect .text ! this is not a subroutine, but just a ! piece of code that computes the jump- ! address and jumps to it. ! traps if resulting address is zero ! ! Stack: ( value tableaddr -- ) .define .csa .csa: lwz r3, 0(sp) lwz r4, 4(sp) addi sp, sp, 8 lwz r5, 0(r3) ! r5 = default target lwz r6, 4(r3) ! fetch lower bound subf. r4, r6, r4 ! adjust value blt 1f ! jump to default if out of range lwz r6, 8(r3) ! fetch range cmplw r4, r6 bgt 1f ! jump to default if out of range addi r3, r3, 12 ! skip header slwi r4, r4, 2 ! scale value (<<2) lwzx r5, r3, r4 ! r5 = new target 1: mtspr ctr, r5 mr. r5, r5 ! test it bnectr ! jump to target if non-zero b .trap_ecase ! otherwise trap