do_store.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /*
  2. * Sources of the "STORE" group instructions
  3. */
  4. /* $Id$ */
  5. #include <em_abs.h>
  6. #include "global.h"
  7. #include "log.h"
  8. #include "mem.h"
  9. #include "trap.h"
  10. #include "text.h"
  11. #include "fra.h"
  12. #include "warn.h"
  13. DoSTL(l)
  14. register long l;
  15. {
  16. /* STL l: Store local or parameter */
  17. LOG(("@S6 DoSTL(%ld)", l));
  18. spoilFRA();
  19. l = arg_l(l);
  20. popw_st(loc_addr(l));
  21. }
  22. DoSTE(arg)
  23. register unsigned long arg;
  24. {
  25. /* STE g: Store external */
  26. register ptr p = i2p(arg);
  27. LOG(("@S6 DoSTE(%lu)", p));
  28. spoilFRA();
  29. popw_m(arg_g(p));
  30. }
  31. DoSIL(l)
  32. register long l;
  33. {
  34. /* SIL l: Store into word pointed to by l-th local or parameter */
  35. LOG(("@S6 DoSIL(%ld)", l));
  36. spoilFRA();
  37. l = arg_l(l);
  38. popw_m(st_lddp(loc_addr(l)));
  39. }
  40. DoSTF(l)
  41. register long l;
  42. {
  43. /* STF f: Store offsetted */
  44. register ptr p = dppop();
  45. LOG(("@S6 DoSTF(%ld)", l));
  46. spoilFRA();
  47. popw_m(p + arg_f(l));
  48. }
  49. DoSTI(l)
  50. register size l;
  51. {
  52. /* STI o: Store indirect o bytes (pop address, then data) */
  53. register ptr p = dppop();
  54. LOG(("@S6 DoSTI(%ld)", l));
  55. spoilFRA();
  56. pop_m(p, arg_o(l));
  57. }
  58. DoSTS(l)
  59. register size l;
  60. {
  61. /* STS w: Store indirect, w-byte integer on top of stack gives object size */
  62. register ptr p;
  63. LOG(("@S6 DoSTS(%ld)", l));
  64. spoilFRA();
  65. l = upop(arg_wi(l));
  66. p = dppop();
  67. pop_m(p, arg_o(l));
  68. }
  69. DoSDL(l)
  70. register long l;
  71. {
  72. /* SDL l: Store double local or parameter */
  73. LOG(("@S6 DoSDL(%ld)", l));
  74. spoilFRA();
  75. l = arg_l(l);
  76. pop_st(loc_addr(l), dwsize);
  77. }
  78. DoSDE(arg)
  79. register unsigned long arg;
  80. {
  81. /* SDE g: Store double external */
  82. register ptr p = i2p(arg);
  83. LOG(("@S6 DoSDE(%lu)", p));
  84. spoilFRA();
  85. pop_m(arg_g(p), dwsize);
  86. }
  87. DoSDF(l)
  88. register long l;
  89. {
  90. /* SDF f: Store double offsetted */
  91. register ptr p = dppop();
  92. LOG(("@S6 DoSDF(%ld)", l));
  93. spoilFRA();
  94. pop_m(p + arg_f(l), dwsize);
  95. }