csb.s 439 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. .global csb
  2. ECASE=20
  3. csb:
  4. ! case descriptor in %o0
  5. ! index in %o1
  6. ld [%o0], %o2 ! default jump address
  7. ld [%o0+4], %o3 ! # entries
  8. inc 8, %o0
  9. tst %o3
  10. be 3f
  11. nop
  12. dec %o3
  13. set 0xffff, %o4
  14. and %o3, %o4, %o5
  15. sll %o5, 3, %o3
  16. 1:
  17. ld [%o0+%o3], %o4
  18. cmp %o4, %o1
  19. be 2f
  20. nop
  21. deccc 8, %o3
  22. bge 1b
  23. nop
  24. b 3f
  25. nop
  26. 2:
  27. inc 4, %o3
  28. ld [%o0+%o3], %o2
  29. 3:
  30. tst %o2
  31. be 4f
  32. nop
  33. jmp %o2
  34. nop
  35. 4:
  36. set ECASE, %o0
  37. set trp, %g1
  38. jmp %g1
  39. nop