mach4.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #define RCSID4 "$Id$"
  2. /*
  3. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
  4. * See the copyright notice in the ACK home directory, in the file "Copyright".
  5. *
  6. */
  7. /* Author: Leo van Moergestel */
  8. /*
  9. * Signetics 2650 parsing rules
  10. */
  11. operation:
  12. NOOP
  13. { emit1($1);}
  14. |
  15. ZERO ',' REG
  16. { emit1($1 | $3); }
  17. |
  18. IMMED ',' REG expr
  19. { emit1($1 | $3); page();
  20. #ifdef RELOCATION
  21. newrelo($4.typ, RELO1);
  22. #endif
  23. emit1($4.val);
  24. }
  25. |
  26. REL ',' REG expr
  27. { emit1($1 | $3); rela($4, 0);}
  28. |
  29. REL ',' REG '*' expr
  30. { emit1($1 | $3); rela($5, 0x80);}
  31. |
  32. ZEROX ',' REG
  33. { if ($3 == R0)
  34. serror("register error");
  35. emit1($1 | $3);
  36. }
  37. |
  38. ABSO ',' REG param
  39. { emit1($1 | $3);
  40. absoa(par_exp, p_indexed, p_indirect);
  41. }
  42. |
  43. PSWM expr
  44. { emit1($1); page();
  45. #ifdef RELOCATION
  46. newrelo($2.typ, RELO1);
  47. #endif
  48. emit1($2.val);
  49. }
  50. |
  51. RET ',' CC
  52. { emit1($1 | $3);}
  53. |
  54. BRANCR ',' CC expr
  55. { emit1($1 | $3); rela($4, 0);}
  56. |
  57. BRANCR ',' CC '*' expr
  58. { emit1($1 | $3); rela($5, 0x80);}
  59. |
  60. BRANCRX ',' CC expr
  61. { if($3 == 3)
  62. serror("wrong condition");
  63. emit1($1 | $3); rela($4, 0);}
  64. |
  65. BRANCRX ',' CC '*' expr
  66. { if($3 == 3)
  67. serror("wrong condition");
  68. emit1($1 | $3); rela($5, 0x80);}
  69. |
  70. BRANCA ',' CC expr
  71. { emit1($1 | $3); absob($4, 0);}
  72. |
  73. BRANCA ',' CC '*' expr
  74. { emit1($1 | $3); absob($5, 0x8000);}
  75. |
  76. BRANCAX ',' CC expr
  77. { if($3 == 3)
  78. serror("wrong condition");
  79. emit1($1 | $3); absob($4, 0);}
  80. |
  81. BRANCAX ',' CC '*' expr
  82. { if($3 == 3)
  83. serror("wrong condition");
  84. emit1($1 | $3); absob($5, 0x8000);}
  85. |
  86. BRANRA ',' REG expr
  87. { emit1($1 | $3); absob($4, 0);}
  88. |
  89. BRANRA ',' REG '*' expr
  90. { emit1($1 | $3); absob($5, 0x8000);}
  91. |
  92. ZBRR expr
  93. { emit1($1); rela($2, 0);}
  94. |
  95. ZBRR '*' expr
  96. { emit1($1); rela($3, 0x80);}
  97. |
  98. BXSA expr
  99. { emit1($1); absob($2, 0);}
  100. |
  101. BXSA '*' expr
  102. { emit1($1); absob($3, 0x8000);}
  103. ;
  104. param:
  105. indir_opt
  106. { p_indexed = 0;}
  107. |
  108. indir_opt ',' INDE
  109. { p_indexed = 0x6000;}
  110. |
  111. indir_opt ',' '+'
  112. { p_indexed = 0x2000;}
  113. |
  114. indir_opt ',' '-'
  115. { p_indexed = 0x4000;}
  116. ;
  117. indir_opt:
  118. expr
  119. { par_exp = $1; p_indirect = 0;}
  120. |
  121. '*' expr
  122. { par_exp = $2; p_indirect = 0x8000;}
  123. ;