optab.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. #include "l.h"
  2. Optab optab[] =
  3. {
  4. { ATEXT, C_LEXT, C_NONE, C_NONE, C_LCON, 0, 0, 0 },
  5. { ATEXT, C_LEXT, C_REG, C_NONE, C_LCON, 0, 0, 0 },
  6. { ATEXT, C_LEXT, C_NONE, C_LCON, C_LCON, 0, 0, 0 },
  7. { ATEXT, C_LEXT, C_REG, C_LCON, C_LCON, 0, 0, 0 },
  8. { AMOVW, C_REG, C_NONE, C_NONE, C_REG, 1, 4, 0 },
  9. { AMOVB, C_REG, C_NONE, C_NONE, C_REG, 12, 4, 0 },
  10. { AMOVBZ, C_REG, C_NONE, C_NONE, C_REG, 13, 4, 0 },
  11. { AADD, C_REG, C_REG, C_NONE, C_REG, 2, 4, 0 },
  12. { AADD, C_REG, C_NONE, C_NONE, C_REG, 2, 4, 0 },
  13. { AADD, C_ADDCON,C_REG, C_NONE, C_REG, 4, 4, 0 },
  14. { AADD, C_ADDCON,C_NONE, C_NONE, C_REG, 4, 4, 0 },
  15. { AADD, C_UCON, C_REG, C_NONE, C_REG, 20, 4, 0 },
  16. { AADD, C_UCON, C_NONE, C_NONE, C_REG, 20, 4, 0 },
  17. { AADD, C_LCON, C_REG, C_NONE, C_REG, 22, 12, 0 },
  18. { AADD, C_LCON, C_NONE, C_NONE, C_REG, 22, 12, 0 },
  19. { AADDC, C_REG, C_REG, C_NONE, C_REG, 2, 4, 0 },
  20. { AADDC, C_REG, C_NONE, C_NONE, C_REG, 2, 4, 0 },
  21. { AADDC, C_ADDCON,C_REG, C_NONE, C_REG, 4, 4, 0 },
  22. { AADDC, C_ADDCON,C_NONE, C_NONE, C_REG, 4, 4, 0 },
  23. { AADDC, C_LCON, C_REG, C_NONE, C_REG, 22, 12, 0 },
  24. { AADDC, C_LCON, C_NONE, C_NONE, C_REG, 22, 12, 0 },
  25. { AAND, C_REG, C_REG, C_NONE, C_REG, 6, 4, 0 }, /* logical, no literal */
  26. { AAND, C_REG, C_NONE, C_NONE, C_REG, 6, 4, 0 },
  27. { AANDCC, C_REG, C_REG, C_NONE, C_REG, 6, 4, 0 },
  28. { AANDCC, C_REG, C_NONE, C_NONE, C_REG, 6, 4, 0 },
  29. { AANDCC, C_ANDCON,C_NONE, C_NONE, C_REG, 58, 4, 0 },
  30. { AANDCC, C_ANDCON,C_REG, C_NONE, C_REG, 58, 4, 0 },
  31. { AANDCC, C_UCON, C_NONE, C_NONE, C_REG, 59, 4, 0 },
  32. { AANDCC, C_UCON, C_REG, C_NONE, C_REG, 59, 4, 0 },
  33. { AANDCC, C_LCON, C_NONE, C_NONE, C_REG, 23, 12, 0 },
  34. { AANDCC, C_LCON, C_REG, C_NONE, C_REG, 23, 12, 0 },
  35. { AMULLW, C_REG, C_REG, C_NONE, C_REG, 2, 4, 0 },
  36. { AMULLW, C_REG, C_NONE, C_NONE, C_REG, 2, 4, 0 },
  37. { AMULLW, C_ADDCON,C_REG, C_NONE, C_REG, 4, 4, 0 },
  38. { AMULLW, C_ADDCON,C_NONE, C_NONE, C_REG, 4, 4, 0 },
  39. { AMULLW, C_ANDCON,C_REG, C_NONE, C_REG, 4, 4, 0 },
  40. { AMULLW, C_ANDCON, C_NONE, C_NONE, C_REG, 4, 4, 0 },
  41. { AMULLW, C_LCON, C_REG, C_NONE, C_REG, 22, 12, 0},
  42. { AMULLW, C_LCON, C_NONE, C_NONE, C_REG, 22, 12, 0},
  43. { ASUBC, C_REG, C_REG, C_NONE, C_REG, 10, 4, 0 },
  44. { ASUBC, C_REG, C_NONE, C_NONE, C_REG, 10, 4, 0 },
  45. { ASUBC, C_REG, C_NONE, C_ADDCON, C_REG, 27, 4, 0 },
  46. { ASUBC, C_REG, C_NONE, C_LCON, C_REG, 28, 12, 0},
  47. { AOR, C_REG, C_REG, C_NONE, C_REG, 6, 4, 0 }, /* logical, literal not cc (or/xor) */
  48. { AOR, C_REG, C_NONE, C_NONE, C_REG, 6, 4, 0 },
  49. { AOR, C_ANDCON, C_NONE, C_NONE, C_REG, 58, 4, 0 },
  50. { AOR, C_ANDCON, C_REG, C_NONE, C_REG, 58, 4, 0 },
  51. { AOR, C_UCON, C_NONE, C_NONE, C_REG, 59, 4, 0 },
  52. { AOR, C_UCON, C_REG, C_NONE, C_REG, 59, 4, 0 },
  53. { AOR, C_LCON, C_NONE, C_NONE, C_REG, 23, 12, 0 },
  54. { AOR, C_LCON, C_REG, C_NONE, C_REG, 23, 12, 0 },
  55. { ADIVW, C_REG, C_REG, C_NONE, C_REG, 2, 4, 0 }, /* op r1[,r2],r3 */
  56. { ADIVW, C_REG, C_NONE, C_NONE, C_REG, 2, 4, 0 },
  57. { ASUB, C_REG, C_REG, C_NONE, C_REG, 10, 4, 0 }, /* op r2[,r1],r3 */
  58. { ASUB, C_REG, C_NONE, C_NONE, C_REG, 10, 4, 0 },
  59. { ASLW, C_REG, C_NONE, C_NONE, C_REG, 6, 4, 0 },
  60. { ASLW, C_REG, C_REG, C_NONE, C_REG, 6, 4, 0 },
  61. { ASLW, C_SCON, C_REG, C_NONE, C_REG, 57, 4, 0 },
  62. { ASLW, C_SCON, C_NONE, C_NONE, C_REG, 57, 4, 0 },
  63. { ASRAW, C_REG, C_NONE, C_NONE, C_REG, 6, 4, 0 },
  64. { ASRAW, C_REG, C_REG, C_NONE, C_REG, 6, 4, 0 },
  65. { ASRAW, C_SCON, C_REG, C_NONE, C_REG, 56, 4, 0 },
  66. { ASRAW, C_SCON, C_NONE, C_NONE, C_REG, 56, 4, 0 },
  67. { ARLWMI, C_SCON, C_REG, C_LCON, C_REG, 62, 4, 0 },
  68. { ARLWMI, C_REG, C_REG, C_LCON, C_REG, 63, 4, 0 },
  69. { AFADD, C_FREG, C_NONE, C_NONE, C_FREG, 2, 4, 0 },
  70. { AFADD, C_FREG, C_REG, C_NONE, C_FREG, 2, 4, 0 },
  71. { AFABS, C_FREG, C_NONE, C_NONE, C_FREG, 33, 4, 0 },
  72. { AFABS, C_NONE, C_NONE, C_NONE, C_FREG, 33, 4, 0 },
  73. { AFMOVD, C_FREG, C_NONE, C_NONE, C_FREG, 33, 4, 0 },
  74. { AFMADD, C_FREG, C_REG, C_FREG, C_FREG, 34, 4, 0 },
  75. { AFMUL, C_FREG, C_NONE, C_NONE, C_FREG, 32, 4, 0 },
  76. { AFMUL, C_FREG, C_REG, C_NONE, C_FREG, 32, 4, 0 },
  77. { AMOVW, C_REG, C_REG, C_NONE, C_ZOREG, 7, 4, REGZERO },
  78. { AMOVBZ, C_REG, C_REG, C_NONE, C_ZOREG, 7, 4, REGZERO },
  79. { AMOVBZU, C_REG, C_REG, C_NONE, C_ZOREG, 7, 4, REGZERO },
  80. { AMOVB, C_REG, C_REG, C_NONE, C_ZOREG, 7, 4, REGZERO },
  81. { AMOVBU, C_REG, C_REG, C_NONE, C_ZOREG, 7, 4, REGZERO },
  82. { AMOVW, C_REG, C_NONE, C_NONE, C_SEXT, 7, 4, REGSB },
  83. { AMOVBZ, C_REG, C_NONE, C_NONE, C_SEXT, 7, 4, REGSB },
  84. { AMOVB, C_REG, C_NONE, C_NONE, C_SEXT, 7, 4, REGSB },
  85. { AMOVW, C_REG, C_NONE, C_NONE, C_SAUTO, 7, 4, REGSP },
  86. { AMOVBZ, C_REG, C_NONE, C_NONE, C_SAUTO, 7, 4, REGSP },
  87. { AMOVB, C_REG, C_NONE, C_NONE, C_SAUTO, 7, 4, REGSP },
  88. { AMOVW, C_REG, C_NONE, C_NONE, C_SOREG, 7, 4, REGZERO },
  89. { AMOVBZ, C_REG, C_NONE, C_NONE, C_SOREG, 7, 4, REGZERO },
  90. { AMOVBZU, C_REG, C_NONE, C_NONE, C_SOREG, 7, 4, REGZERO },
  91. { AMOVB, C_REG, C_NONE, C_NONE, C_SOREG, 7, 4, REGZERO },
  92. { AMOVBU, C_REG, C_NONE, C_NONE, C_SOREG, 7, 4, REGZERO },
  93. { AMOVW, C_ZOREG,C_REG, C_NONE, C_REG, 8, 4, REGZERO },
  94. { AMOVBZ, C_ZOREG,C_REG, C_NONE, C_REG, 8, 4, REGZERO },
  95. { AMOVBZU, C_ZOREG,C_REG, C_NONE, C_REG, 8, 4, REGZERO },
  96. { AMOVB, C_ZOREG,C_REG, C_NONE, C_REG, 9, 8, REGZERO },
  97. { AMOVBU, C_ZOREG,C_REG, C_NONE, C_REG, 9, 8, REGZERO },
  98. { AMOVW, C_SEXT, C_NONE, C_NONE, C_REG, 8, 4, REGSB },
  99. { AMOVBZ, C_SEXT, C_NONE, C_NONE, C_REG, 8, 4, REGSB },
  100. { AMOVB, C_SEXT, C_NONE, C_NONE, C_REG, 9, 8, REGSB },
  101. { AMOVW, C_SAUTO,C_NONE, C_NONE, C_REG, 8, 4, REGSP },
  102. { AMOVBZ, C_SAUTO,C_NONE, C_NONE, C_REG, 8, 4, REGSP },
  103. { AMOVB, C_SAUTO,C_NONE, C_NONE, C_REG, 9, 8, REGSP },
  104. { AMOVW, C_SOREG,C_NONE, C_NONE, C_REG, 8, 4, REGZERO },
  105. { AMOVBZ, C_SOREG,C_NONE, C_NONE, C_REG, 8, 4, REGZERO },
  106. { AMOVBZU, C_SOREG,C_NONE, C_NONE, C_REG, 8, 4, REGZERO },
  107. { AMOVB, C_SOREG,C_NONE, C_NONE, C_REG, 9, 8, REGZERO },
  108. { AMOVBU, C_SOREG,C_NONE, C_NONE, C_REG, 9, 8, REGZERO },
  109. { AMOVW, C_REG, C_NONE, C_NONE, C_LEXT, 35, 8, REGSB },
  110. { AMOVBZ, C_REG, C_NONE, C_NONE, C_LEXT, 35, 8, REGSB },
  111. { AMOVB, C_REG, C_NONE, C_NONE, C_LEXT, 35, 8, REGSB },
  112. { AMOVW, C_REG, C_NONE, C_NONE, C_LAUTO, 35, 8, REGSP },
  113. { AMOVBZ, C_REG, C_NONE, C_NONE, C_LAUTO, 35, 8, REGSP },
  114. { AMOVB, C_REG, C_NONE, C_NONE, C_LAUTO, 35, 8, REGSP },
  115. { AMOVW, C_REG, C_NONE, C_NONE, C_LOREG, 35, 8, REGZERO },
  116. { AMOVBZ, C_REG, C_NONE, C_NONE, C_LOREG, 35, 8, REGZERO },
  117. { AMOVB, C_REG, C_NONE, C_NONE, C_LOREG, 35, 8, REGZERO },
  118. { AMOVW, C_LEXT, C_NONE, C_NONE, C_REG, 36, 8, REGSB },
  119. { AMOVBZ, C_LEXT, C_NONE, C_NONE, C_REG, 36, 8, REGSB },
  120. { AMOVB, C_LEXT, C_NONE, C_NONE, C_REG, 37, 12, REGSB },
  121. { AMOVW, C_LAUTO,C_NONE, C_NONE, C_REG, 36, 8, REGSP },
  122. { AMOVBZ, C_LAUTO,C_NONE, C_NONE, C_REG, 36, 8, REGSP },
  123. { AMOVB, C_LAUTO,C_NONE, C_NONE, C_REG, 37, 12, REGSP },
  124. { AMOVW, C_LOREG,C_NONE, C_NONE, C_REG, 36, 8, REGZERO },
  125. { AMOVBZ, C_LOREG,C_NONE, C_NONE, C_REG, 36, 8, REGZERO },
  126. { AMOVB, C_LOREG,C_NONE, C_NONE, C_REG, 37, 12, REGZERO },
  127. { AMOVW, C_SECON,C_NONE, C_NONE, C_REG, 3, 4, REGSB },
  128. { AMOVW, C_SACON,C_NONE, C_NONE, C_REG, 3, 4, REGSP },
  129. { AMOVW, C_LECON,C_NONE, C_NONE, C_REG, 26, 8, REGSB },
  130. { AMOVW, C_LACON,C_NONE, C_NONE, C_REG, 26, 8, REGSP },
  131. { AMOVW, C_ADDCON,C_NONE, C_NONE, C_REG, 3, 4, REGZERO },
  132. { AMOVW, C_UCON, C_NONE, C_NONE, C_REG, 3, 4, REGZERO },
  133. { AMOVW, C_LCON, C_NONE, C_NONE, C_REG, 19, 8, 0 },
  134. { AMOVHBR, C_ZOREG, C_REG, C_NONE, C_REG, 45, 4, 0 },
  135. { AMOVHBR, C_ZOREG, C_NONE, C_NONE, C_REG, 45, 4, 0 },
  136. { AMOVHBR, C_REG, C_REG, C_NONE, C_ZOREG, 44, 4, 0 },
  137. { AMOVHBR, C_REG, C_NONE, C_NONE, C_ZOREG, 44, 4, 0 },
  138. { ASYSCALL, C_NONE, C_NONE, C_NONE, C_NONE, 5, 4, 0 },
  139. { ABEQ, C_NONE, C_NONE, C_NONE, C_SBRA, 16, 4, 0 },
  140. { ABEQ, C_CREG, C_NONE, C_NONE, C_SBRA, 16, 4, 0 },
  141. { ABR, C_NONE, C_NONE, C_NONE, C_LBRA, 11, 4, 0 },
  142. { ABC, C_SCON, C_REG, C_NONE, C_SBRA, 16, 4, 0 },
  143. { ABC, C_SCON, C_REG, C_NONE, C_LBRA, 17, 4, 0 },
  144. { ABR, C_NONE, C_NONE, C_NONE, C_LR, 18, 4, 0 },
  145. { ABR, C_NONE, C_NONE, C_NONE, C_CTR, 18, 4, 0 },
  146. { ABR, C_NONE, C_NONE, C_NONE, C_ZOREG, 15, 8, 0 },
  147. { ABC, C_NONE, C_REG, C_NONE, C_LR, 18, 4, 0 },
  148. { ABC, C_NONE, C_REG, C_NONE, C_CTR, 18, 4, 0 },
  149. { ABC, C_SCON, C_REG, C_NONE, C_LR, 18, 4, 0 },
  150. { ABC, C_SCON, C_REG, C_NONE, C_CTR, 18, 4, 0 },
  151. { ABC, C_NONE, C_NONE, C_NONE, C_ZOREG, 15, 8, 0 },
  152. { AFMOVD, C_SEXT, C_NONE, C_NONE, C_FREG, 8, 4, REGSB },
  153. { AFMOVD, C_SAUTO,C_NONE, C_NONE, C_FREG, 8, 4, REGSP },
  154. { AFMOVD, C_SOREG,C_NONE, C_NONE, C_FREG, 8, 4, REGZERO },
  155. { AFMOVD, C_LEXT, C_NONE, C_NONE, C_FREG, 8, 4, REGSB },
  156. { AFMOVD, C_LAUTO,C_NONE, C_NONE, C_FREG, 8, 4, REGSP },
  157. { AFMOVD, C_LOREG,C_NONE, C_NONE, C_FREG, 8, 4, REGZERO },
  158. { AFMOVD, C_FREG, C_NONE, C_NONE, C_SEXT, 7, 4, REGSB },
  159. { AFMOVD, C_FREG, C_NONE, C_NONE, C_SAUTO, 7, 4, REGSP },
  160. { AFMOVD, C_FREG, C_NONE, C_NONE, C_SOREG, 7, 4, REGZERO },
  161. { AFMOVD, C_FREG, C_NONE, C_NONE, C_LEXT, 7, 4, REGSB },
  162. { AFMOVD, C_FREG, C_NONE, C_NONE, C_LAUTO, 7, 4, REGSP },
  163. { AFMOVD, C_FREG, C_NONE, C_NONE, C_LOREG, 7, 4, REGZERO },
  164. { ASYNC, C_NONE, C_NONE, C_NONE, C_NONE, 46, 4, 0 },
  165. { AWORD, C_LCON, C_NONE, C_NONE, C_NONE, 40, 4, 0 },
  166. { AADDME, C_REG, C_NONE, C_NONE, C_REG, 47, 4, 0 },
  167. { AEXTSB, C_REG, C_NONE, C_NONE, C_REG, 48, 4, 0 },
  168. { AEXTSB, C_NONE, C_NONE, C_NONE, C_REG, 48, 4, 0 },
  169. { ANEG, C_REG, C_NONE, C_NONE, C_REG, 47, 4, 0 },
  170. { ANEG, C_NONE, C_NONE, C_NONE, C_REG, 47, 4, 0 },
  171. { AREM, C_REG, C_NONE, C_NONE, C_REG, 51, 12, 0 },
  172. { AREM, C_REG, C_REG, C_NONE, C_REG, 51, 12, 0 },
  173. { AMTFSB0, C_SCON, C_NONE, C_NONE, C_NONE, 52, 4, 0 },
  174. { AMOVFL, C_FPSCR, C_NONE, C_NONE, C_FREG, 53, 4, 0 },
  175. { AMOVFL, C_FREG, C_NONE, C_NONE, C_FPSCR, 64, 4, 0 },
  176. { AMOVFL, C_FREG, C_NONE, C_LCON, C_FPSCR, 64, 4, 0 },
  177. { AMOVFL, C_LCON, C_NONE, C_NONE, C_FPSCR, 65, 4, 0 },
  178. { AMOVW, C_REG, C_NONE, C_NONE, C_MSR, 54, 4, 0 },
  179. { AMOVW, C_MSR, C_NONE, C_NONE, C_REG, 54, 4, 0 },
  180. { AMOVW, C_SREG, C_NONE, C_NONE, C_REG, 55, 4, 0 },
  181. { AMOVW, C_REG, C_NONE, C_NONE, C_SREG, 55, 4, 0 },
  182. { AMOVW, C_SREG, C_REG, C_NONE, C_REG, 55, 4, 0 }, /* MOVW SR(Rn), Rm and v.v.*/
  183. { AMOVW, C_REG, C_REG, C_NONE, C_SREG, 55, 4, 0 },
  184. { AMOVW, C_REG, C_NONE, C_NONE, C_SPR, 66, 4, 0 },
  185. { AMOVW, C_REG, C_NONE, C_NONE, C_LR, 66, 4, 0 },
  186. { AMOVW, C_REG, C_NONE, C_NONE, C_CTR, 66, 4, 0 },
  187. { AMOVW, C_REG, C_NONE, C_NONE, C_XER, 66, 4, 0 },
  188. { AMOVW, C_SPR, C_NONE, C_NONE, C_REG, 66, 4, 0 },
  189. { AMOVW, C_LR, C_NONE, C_NONE, C_REG, 66, 4, 0 },
  190. { AMOVW, C_CTR, C_NONE, C_NONE, C_REG, 66, 4, 0 },
  191. { AMOVW, C_XER, C_NONE, C_NONE, C_REG, 66, 4, 0 },
  192. { AMOVFL, C_FPSCR, C_NONE, C_NONE, C_CREG, 73, 4, 0 },
  193. { AMOVFL, C_CREG, C_NONE, C_NONE, C_CREG, 67, 4, 0 },
  194. { AMOVW, C_XER, C_NONE, C_NONE, C_CREG, 72, 4, 0 },
  195. { AMOVW, C_CREG, C_NONE, C_NONE, C_REG, 68, 4, 0 },
  196. { AMOVFL, C_REG, C_NONE, C_LCON, C_CREG, 69, 4, 0 },
  197. { AMOVFL, C_REG, C_NONE, C_NONE, C_CREG, 69, 4, 0 },
  198. { AMOVW, C_REG, C_NONE, C_NONE, C_CREG, 69, 4, 0 },
  199. { ACMP, C_REG, C_NONE, C_NONE, C_REG, 70, 4, 0 },
  200. { ACMP, C_REG, C_REG, C_NONE, C_REG, 70, 4, 0 },
  201. { ACMP, C_REG, C_NONE, C_NONE, C_ADDCON, 71, 4, 0 },
  202. { ACMP, C_REG, C_REG, C_NONE, C_ADDCON, 71, 4, 0 },
  203. { ACMPU, C_REG, C_NONE, C_NONE, C_REG, 70, 4, 0 },
  204. { ACMPU, C_REG, C_REG, C_NONE, C_REG, 70, 4, 0 },
  205. { ACMPU, C_REG, C_NONE, C_NONE, C_ANDCON, 71, 4, 0 },
  206. { ACMPU, C_REG, C_REG, C_NONE, C_ANDCON, 71, 4, 0 },
  207. { AFCMPO, C_FREG, C_NONE, C_NONE, C_FREG, 70, 4, 0 },
  208. { AFCMPO, C_FREG, C_REG, C_NONE, C_FREG, 70, 4, 0 },
  209. { ATW, C_LCON, C_REG, C_NONE, C_REG, 60, 4, 0 },
  210. { ATW, C_LCON, C_REG, C_NONE, C_ADDCON, 61, 4, 0 },
  211. { ADCBF, C_ZOREG, C_NONE, C_NONE, C_NONE, 43, 4, 0 },
  212. { ADCBF, C_ZOREG, C_REG, C_NONE, C_NONE, 43, 4, 0 },
  213. { AECOWX, C_REG, C_REG, C_NONE, C_ZOREG, 44, 4, 0 },
  214. { AECIWX, C_ZOREG, C_REG, C_NONE, C_REG, 45, 4, 0 },
  215. { AECOWX, C_REG, C_NONE, C_NONE, C_ZOREG, 44, 4, 0 },
  216. { AECIWX, C_ZOREG, C_NONE, C_NONE, C_REG, 45, 4, 0 },
  217. { AEIEIO, C_NONE, C_NONE, C_NONE, C_NONE, 46, 4, 0 },
  218. { ATLBIE, C_REG, C_NONE, C_NONE, C_NONE, 49, 4, 0 },
  219. { ASTSW, C_REG, C_NONE, C_NONE, C_ZOREG, 44, 4, 0 },
  220. { ASTSW, C_REG, C_NONE, C_LCON, C_ZOREG, 41, 4, 0 },
  221. { ALSW, C_ZOREG, C_NONE, C_NONE, C_REG, 45, 4, 0 },
  222. { ALSW, C_ZOREG, C_NONE, C_LCON, C_REG, 42, 4, 0 },
  223. { AXXX, C_NONE, C_NONE, C_NONE, C_NONE, 0, 4, 0 },
  224. };