Chinaunix首页 | 论坛 | 博客
  • 博客访问: 264573
  • 博文数量: 52
  • 博客积分: 1379
  • 博客等级: 大尉
  • 技术积分: 525
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-18 17:34
文章分类

全部博文(52)

文章存档

2011年(48)

2010年(4)

分类: C/C++

2011-03-01 22:45:09

把寄存器的值保存到内存中


  1. /* store register 'r' in lvalue 'v' */
  2. ST_FUNC void store(int r, SValue *v)
  3. {
  4.     int fr, bt, ft, fc;

  5.     ft = v->type.t;
  6.     fc = v->c.ul;
  7.     fr = v->r & VT_VALMASK;
  8.     bt = ft & VT_BTYPE;
  9.     /* XXX: incorrect if float reg to reg */
  10.     if (bt == VT_FLOAT) {
  11.         o(0xd9); /* fsts */
  12.         r = 2;
  13.     } else if (bt == VT_DOUBLE) {
  14.         o(0xdd); /* fstpl */
  15.         r = 2;
  16.     } else if (bt == VT_LDOUBLE) {
  17.         o(0xc0d9); /* fld %st(0) */
  18.         o(0xdb); /* fstpt */
  19.         r = 7;
  20.     } else {
  21.         16 位 prefix
  22.         if (bt == VT_SHORT)
  23.             o(0x66);
  24.         if (bt == VT_BYTE || bt == VT_BOOL)
  25.             o(0x88); 8 位偏移
  26.         else
  27.             o(0x89); 32 位
  28.     }
  29.     if (fr == VT_CONST ||
  30.         fr == VT_LOCAL ||
  31.         (v->r & VT_LVAL)) {
  32.         gen_modrm(r, v->r, v->sym, fc);
  33.     } else if (fr != r) {
  34.         该判断是多余的?
  35.         o(0xc0 + fr + r * 8); /* mov r, fr */
  36.     }
  37. }



阅读(1715) | 评论(0) | 转发(0) |
0

上一篇:save_reg

下一篇:get_reg

给主人留下些什么吧!~~