jmp32.s 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. # mach: bpf
  2. # output: pass\nexit 0 (0x0)\n
  3. ;;; jmp32.s
  4. ;;; Tests for eBPF JMP32 instructions in simulator
  5. .include "testutils.inc"
  6. .text
  7. .global main
  8. .type main, @function
  9. main:
  10. mov32 %r1, 5
  11. mov32 %r2, 2
  12. mov32 %r3, 7
  13. mov32 %r4, -1
  14. ;; ja - jump absolute (unconditional)
  15. ja 2f
  16. 1: fail
  17. 2: ;; jeq - jump eq
  18. jeq32 %r1, 4, 1b ; no
  19. jeq32 %r1, %r2, 1b ; no
  20. jeq32 %r1, 5, 2f ; yes
  21. fail
  22. 2: jeq32 %r1, %r1, 2f ; yes
  23. fail
  24. 2: ;; jgt - jump (unsigned) greater-than
  25. jgt32 %r1, 6, 1b ; no
  26. jgt32 %r1, -5, 1b ; no - unsigned
  27. jgt32 %r1, %r4, 1b ; no - unsigned
  28. jgt32 %r1, 4, 2f ; yes
  29. fail
  30. 2: jgt32 %r1, %r2, 2f ; yes
  31. fail
  32. 2: ;; jge - jump (unsigned) greater-than-or-equal-to
  33. jge32 %r1, 6, 1b ; no
  34. jge32 %r1, 5, 2f ; yes
  35. fail
  36. 2: jge32 %r1, %r3, 1b ; no
  37. jge32 %r1, -5, 1b ; no - unsigned
  38. jge32 %r1, %r2, 2f ; yes
  39. fail
  40. 2: ;; jlt - jump (unsigned) less-than
  41. jlt32 %r1, 5, 1b ; no
  42. jlt32 %r1, %r2, 1b ; no
  43. jlt32 %r4, %r1, 1b ; no - unsigned
  44. jlt32 %r1, 6, 2f ; yes
  45. fail
  46. 2:
  47. jlt32 %r1, %r3, 2f ; yes
  48. fail
  49. 2: ;; jle - jump (unsigned) less-than-or-equal-to
  50. jle32 %r1, 4, 1b ; no
  51. jle32 %r1, %r2, 1b ; no
  52. jle32 %r4, %r1, 1b ; no
  53. jle32 %r1, 5, 2f ; yes
  54. fail
  55. 2: jle32 %r1, %r1, 2f ; yes
  56. fail
  57. 2: ;; jset - jump "test" (AND)
  58. jset32 %r1, 2, 1b ; no (5 & 2 = 0)
  59. jset32 %r1, %r2, 1b ; no (same)
  60. jset32 %r1, 4, 2f ; yes (5 & 4 != 0)
  61. fail
  62. 2: ;; jne - jump not-equal-to
  63. jne32 %r1, 5, 1b ; no
  64. jne32 %r1, %r1, 1b ; no
  65. jne32 %r1, 6, 2f ; yes
  66. fail
  67. 2: jne32 %r1, %r4, 2f ; yes
  68. fail
  69. 2: ;; jsgt - jump (signed) greater-than
  70. jsgt32 %r1, %r3, 1b ; no
  71. jsgt32 %r1, %r1, 1b ; no
  72. jsgt32 %r1, 5, 1b ; no
  73. jsgt32 %r1, -4, 2f ; yes
  74. fail
  75. 2: jsgt32 %r1, %r4, 2f ; yes
  76. fail
  77. 2: ;; jsge - jump (signed) greater-than-or-equal-to
  78. jsge32 %r1, %r3, 1b ; no
  79. jsge32 %r1, %r1, 2f ; yes
  80. fail
  81. 2: jsge32 %r1, 7, 1b ; no
  82. jsge32 %r1, -4, 2f ; yes
  83. fail
  84. 2: jsge32 %r1, %r4, 2f ; yes
  85. fail
  86. 2: ;; jslt - jump (signed) less-than
  87. jslt32 %r1, 5, 1b ; no
  88. jslt32 %r1, %r2, 1b ; no
  89. jslt32 %r4, %r1, 2f ; yes
  90. fail
  91. 2: jslt32 %r1, 6, 2f ; yes
  92. fail
  93. 2: jslt32 %r1, %r3, 2f ; yes
  94. fail
  95. 2: ;; jsle - jump (signed) less-than-or-equal-to
  96. jsle32 %r1, 4, 1b ; no
  97. jsle32 %r1, %r2, 1b ; no
  98. jsle32 %r4, %r1, 2f ; yes
  99. fail
  100. 2: jsle32 %r1, 5, 2f ; yes
  101. fail
  102. 2: jsle32 %r1, %r3, 2f ; yes
  103. fail
  104. 2:
  105. pass