/test/kilim/test/ex/ExYieldSub.j

http://github.com/kilim/kilim · Unknown · 299 lines · 248 code · 51 blank · 0 comment · 0 complexity · f62bd8c54474bd483c6987352774f64d MD5 · raw file

  1. .class public synchronized kilim/test/ex/ExYieldSub
  2. .super kilim/test/ex/ExYieldBase
  3. ; -------------------------------------------------------------
  4. .method public <init>()V
  5. ; -------------------------------------------------------------
  6. aload 0
  7. invokespecial kilim/test/ex/ExYieldBase/<init>()V
  8. return
  9. .limit stack 1
  10. .limit locals 1
  11. .end method
  12. ; -------------------------------------------------------------
  13. .method public execute()V
  14. ; -------------------------------------------------------------
  15. .throws kilim/Pausable
  16. aload 0
  17. iconst_0
  18. putfield kilim/test/ex/ExYieldSub/doPause Z
  19. aload 0
  20. invokespecial kilim/test/ex/ExYieldSub/test()V
  21. aload 0
  22. iconst_1
  23. putfield kilim/test/ex/ExYieldSub/doPause Z
  24. aload 0
  25. invokespecial kilim/test/ex/ExYieldSub/test()V
  26. return
  27. .limit stack 2
  28. .limit locals 1
  29. .end method
  30. ; -------------------------------------------------------------
  31. .method private test()V
  32. ; -------------------------------------------------------------
  33. .throws kilim/Pausable
  34. aload 0
  35. getfield kilim/test/ex/ExYieldSub/testCase I
  36. tableswitch 0
  37. L0
  38. L1
  39. L2
  40. L3
  41. default: L0
  42. L0:
  43. getstatic kilim/test/ex/ExYieldSub/fd D
  44. getstatic kilim/test/ex/ExYieldSub/ff F
  45. aload 0
  46. getfield kilim/test/ex/ExYieldSub/doPause Z
  47. invokestatic kilim/test/ex/ExYieldSub/nonPausableJSRs(DFZ)V
  48. goto L4
  49. L1:
  50. getstatic kilim/test/ex/ExYieldSub/fd D
  51. getstatic kilim/test/ex/ExYieldSub/ff F
  52. aload 0
  53. getfield kilim/test/ex/ExYieldSub/doPause Z
  54. invokestatic kilim/test/ex/ExYieldSub/singlePausable(DFZ)V
  55. goto L4
  56. L2:
  57. getstatic kilim/test/ex/ExYieldSub/fc C
  58. getstatic kilim/test/ex/ExYieldSub/fl J
  59. aload 0
  60. getfield kilim/test/ex/ExYieldSub/doPause Z
  61. invokestatic kilim/test/ex/ExYieldSub/multiplePausable(CJZ)V
  62. goto L4
  63. L3:
  64. getstatic kilim/test/ex/ExYieldBase/fd D
  65. getstatic kilim/test/ex/ExYieldBase/fs Ljava/lang/String;
  66. getstatic kilim/test/ex/ExYieldBase/fl J
  67. aload 0
  68. getfield kilim/test/ex/ExYieldSub/doPause Z
  69. invokestatic kilim/test/ex/ExYieldSub/mixedPausable(DLjava/lang/Object;JZ)V
  70. L4:
  71. return
  72. .limit stack 10
  73. .limit locals 1
  74. .end method
  75. ; -------------------------------------------------------------
  76. .method public static nonPausableJSRs(DFZ)V
  77. ; nonPausableJSRs(double d, float f, boolean doPause)
  78. ; -------------------------------------------------------------
  79. ; load stack before jsr. This gets consumed by SUB2 when SUB 1 calls it.
  80. dload 0
  81. fload 2
  82. jsr L1
  83. return
  84. L1:
  85. astore 4
  86. dload 0
  87. invokestatic kilim/test/ex/ExYieldBase/verify(D)V
  88. fload 2
  89. invokestatic kilim/test/ex/ExYieldBase/verify(F)V
  90. jsr L2
  91. ret 4
  92. L2:
  93. astore 5
  94. invokestatic kilim/test/ex/ExYieldBase/verify(F)V
  95. invokestatic kilim/test/ex/ExYieldBase/verify(D)V
  96. ret 5
  97. .limit stack 10
  98. .limit locals 6
  99. .end method
  100. ; -------------------------------------------------------------
  101. .method public static singlePausable(DFZ)V
  102. ; single(double d, float f, boolean doPause)
  103. ; -------------------------------------------------------------
  104. .throws kilim/Pausable
  105. ; load stack before JSR
  106. dload 0
  107. fload 2
  108. jsr L
  109. ; make sure local vars haven't been tampered with
  110. dload 0
  111. invokestatic kilim/test/ex/ExYieldBase/verify(D)V
  112. fload 2
  113. invokestatic kilim/test/ex/ExYieldBase/verify(F)V
  114. return
  115. L:
  116. astore 4 ; ret address
  117. iload 3
  118. ifeq L1 ; if doPause
  119. ldc2_w 10
  120. invokestatic kilim/Task/sleep(J)V ; Task.sleep(10)
  121. L1:
  122. ; verify stack is preserved
  123. invokestatic kilim/test/ex/ExYieldBase/verify(F)V
  124. invokestatic kilim/test/ex/ExYieldBase/verify(D)V
  125. ; verify local vars are preserved
  126. dload 0
  127. invokestatic kilim/test/ex/ExYieldBase/verify(D)V
  128. fload 2
  129. invokestatic kilim/test/ex/ExYieldBase/verify(F)V
  130. ret 4
  131. .limit stack 10
  132. .limit locals 5
  133. .end method
  134. ; -------------------------------------------------------------
  135. .method public static multiplePausable(CJZ)V
  136. ; -------------------------------------------------------------
  137. .throws kilim/Pausable
  138. ; load stack before JSR
  139. iload 0
  140. lload 1
  141. jsr SUB1
  142. lload 1
  143. iload 0
  144. jsr SUB2
  145. iload 0
  146. lload 1
  147. jsr SUB1
  148. ; make sure local vars haven't been tampered with
  149. iload 0
  150. invokestatic kilim/test/ex/ExYieldBase/verify(I)V
  151. lload 1
  152. invokestatic kilim/test/ex/ExYieldBase/verify(J)V
  153. return
  154. ; SUB1 consumes long then int on stack, and leaves it empty
  155. SUB1:
  156. astore 4 ; ret address
  157. iload 3
  158. ifeq L1 ; if doPause
  159. ldc2_w 10
  160. invokestatic kilim/Task/sleep(J)V ; Task.sleep(10)
  161. L1:
  162. ; verify stack is preserved
  163. invokestatic kilim/test/ex/ExYieldBase/verify(J)V
  164. invokestatic kilim/test/ex/ExYieldBase/verify(I)V
  165. ; verify local vars are preserved
  166. iload 0
  167. invokestatic kilim/test/ex/ExYieldBase/verify(I)V
  168. lload 1
  169. invokestatic kilim/test/ex/ExYieldBase/verify(J)V
  170. ret 4
  171. ; SUB2 consumes int then long on stack, and leaves it empty
  172. SUB2:
  173. astore 4 ; ret address
  174. iload 3
  175. ifeq L2 ; if doPause
  176. ldc2_w 10
  177. invokestatic kilim/Task/sleep(J)V ; Task.sleep(10)
  178. L2:
  179. ; verify stack is preserved
  180. invokestatic kilim/test/ex/ExYieldBase/verify(I)V
  181. invokestatic kilim/test/ex/ExYieldBase/verify(J)V
  182. ; verify local vars are preserved
  183. iload 0
  184. invokestatic kilim/test/ex/ExYieldBase/verify(I)V
  185. lload 1
  186. invokestatic kilim/test/ex/ExYieldBase/verify(J)V
  187. ret 4
  188. .limit stack 10
  189. .limit locals 5
  190. .end method
  191. ; -------------------------------------------------------------
  192. .method public static mixedPausable(DLjava/lang/Object;JZ)V
  193. ; -------------------------------------------------------------
  194. .throws kilim/Pausable
  195. ; throw in some constants in the stack
  196. sipush 10
  197. bipush 10
  198. ldc 10.0
  199. ldc2_w 10.0
  200. ldc2_w 10
  201. ldc "10"
  202. ; some duplicates
  203. dup
  204. dload 0
  205. ; stack has S B F D J Str Str D
  206. ; The subroutines below don't touch the stack, so we'll verify
  207. ; if they have been preserved at the end.
  208. jsr NonPausableSub
  209. jsr PausableSub
  210. jsr NonPausableSub
  211. jsr PausableSub
  212. ; make sure local vars haven't been tampered with
  213. dload 0
  214. invokestatic kilim/test/ex/ExYieldBase/verify(D)V
  215. aload 2
  216. checkcast java/lang/String
  217. invokestatic kilim/test/ex/ExYieldBase/verify(Ljava/lang/String;)V
  218. ; make sure all stack vars are preserved.
  219. invokestatic kilim/test/ex/ExYieldBase/verify(D)V
  220. invokestatic kilim/test/ex/ExYieldBase/verify(Ljava/lang/String;)V
  221. invokestatic kilim/test/ex/ExYieldBase/verify(Ljava/lang/String;)V
  222. invokestatic kilim/test/ex/ExYieldBase/verify(J)V
  223. invokestatic kilim/test/ex/ExYieldBase/verify(D)V
  224. invokestatic kilim/test/ex/ExYieldBase/verify(F)V
  225. invokestatic kilim/test/ex/ExYieldBase/verify(I)V
  226. invokestatic kilim/test/ex/ExYieldBase/verify(S)V
  227. return
  228. NonPausableSub:
  229. ; just to test that if the entry and exit are in the same BB
  230. ; it is ok.
  231. astore 6
  232. ret 6
  233. PausableSub:
  234. astore 6 ; ret address
  235. iload 5
  236. ifeq NOSLEEP ; if doPause
  237. ldc2_w 10
  238. invokestatic kilim/Task/sleep(J)V ; Task.sleep(10)
  239. NOSLEEP:
  240. ; verify sample local vars are preserved
  241. lload 3
  242. invokestatic kilim/test/ex/ExYieldBase/verify(J)V
  243. dload 0
  244. invokestatic kilim/test/ex/ExYieldBase/verify(D)V
  245. ret 6
  246. .limit stack 20
  247. .limit locals 7
  248. .end method