📄 op_mem.h
字号:
/*** Integer load ***/#define SPARC_LD_OP(name, qp) \void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void) \{ \ T1 = (target_ulong)glue(qp, MEMSUFFIX)(T0); \}#define SPARC_LD_OP_S(name, qp) \ void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void) \ { \ T1 = (target_long)glue(qp, MEMSUFFIX)(T0); \ }#define SPARC_ST_OP(name, op) \void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void) \{ \ glue(op, MEMSUFFIX)(T0, T1); \}SPARC_LD_OP(ld, ldl);SPARC_LD_OP(ldub, ldub);SPARC_LD_OP(lduh, lduw);SPARC_LD_OP_S(ldsb, ldsb);SPARC_LD_OP_S(ldsh, ldsw);/*** Integer store ***/SPARC_ST_OP(st, stl);SPARC_ST_OP(stb, stb);SPARC_ST_OP(sth, stw);void OPPROTO glue(op_std, MEMSUFFIX)(void){ glue(stl, MEMSUFFIX)(T0, T1); glue(stl, MEMSUFFIX)((T0 + 4), T2);}void OPPROTO glue(op_ldstub, MEMSUFFIX)(void){ T1 = glue(ldub, MEMSUFFIX)(T0); glue(stb, MEMSUFFIX)(T0, 0xff); /* XXX: Should be Atomically */}void OPPROTO glue(op_swap, MEMSUFFIX)(void){ target_ulong tmp = glue(ldl, MEMSUFFIX)(T0); glue(stl, MEMSUFFIX)(T0, T1); /* XXX: Should be Atomically */ T1 = tmp;}void OPPROTO glue(op_ldd, MEMSUFFIX)(void){ T1 = glue(ldl, MEMSUFFIX)(T0); T0 = glue(ldl, MEMSUFFIX)((T0 + 4));}/*** Floating-point store ***/void OPPROTO glue(op_stf, MEMSUFFIX) (void){ glue(stfl, MEMSUFFIX)(T0, FT0);}void OPPROTO glue(op_stdf, MEMSUFFIX) (void){ glue(stfq, MEMSUFFIX)(T0, DT0);}/*** Floating-point load ***/void OPPROTO glue(op_ldf, MEMSUFFIX) (void){ FT0 = glue(ldfl, MEMSUFFIX)(T0);}void OPPROTO glue(op_lddf, MEMSUFFIX) (void){ DT0 = glue(ldfq, MEMSUFFIX)(T0);}#ifdef TARGET_SPARC64/* XXX: Should be Atomically *//* XXX: There are no cas[x] instructions, only cas[x]a */void OPPROTO glue(op_cas, MEMSUFFIX)(void){ uint32_t tmp; tmp = glue(ldl, MEMSUFFIX)(T0); T2 &= 0xffffffffULL; if (tmp == (T1 & 0xffffffffULL)) { glue(stl, MEMSUFFIX)(T0, T2); } T2 = tmp;}void OPPROTO glue(op_casx, MEMSUFFIX)(void){ uint64_t tmp; // XXX tmp = (uint64_t)glue(ldl, MEMSUFFIX)(T0) << 32; tmp |= glue(ldl, MEMSUFFIX)(T0); if (tmp == T1) { glue(stq, MEMSUFFIX)(T0, T2); } T2 = tmp;}void OPPROTO glue(op_ldsw, MEMSUFFIX)(void){ T1 = (int64_t)(glue(ldl, MEMSUFFIX)(T0) & 0xffffffff);}SPARC_LD_OP(ldx, ldq);SPARC_ST_OP(stx, stq);#endif#undef MEMSUFFIX
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -