/[qemu]/qemu/target-sparc/op_mem.h
ViewVC logotype

Diff of /qemu/target-sparc/op_mem.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.5 by bellard, Sun Jan 30 22:39:04 2005 UTC revision 1.6 by bellard, Sat Jul 2 14:31:34 2005 UTC
# Line 2  Line 2 
2  #define SPARC_LD_OP(name, qp)                                                 \  #define SPARC_LD_OP(name, qp)                                                 \
3  void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void)                           \  void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void)                           \
4  {                                                                             \  {                                                                             \
5      T1 = glue(qp, MEMSUFFIX)(T0);                                     \      T1 = (target_ulong)glue(qp, MEMSUFFIX)(T0);                         \
6  }  }
7    
8    #define SPARC_LD_OP_S(name, qp)                                         \
9        void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void)                 \
10        {                                                                   \
11            T1 = (target_long)glue(qp, MEMSUFFIX)(T0);                      \
12        }
13    
14  #define SPARC_ST_OP(name, op)                                                 \  #define SPARC_ST_OP(name, op)                                                 \
15  void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void)                           \  void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void)                           \
16  {                                                                             \  {                                                                             \
# Line 14  void OPPROTO glue(glue(op_, name), MEMSU Line 20  void OPPROTO glue(glue(op_, name), MEMSU
20  SPARC_LD_OP(ld, ldl);  SPARC_LD_OP(ld, ldl);
21  SPARC_LD_OP(ldub, ldub);  SPARC_LD_OP(ldub, ldub);
22  SPARC_LD_OP(lduh, lduw);  SPARC_LD_OP(lduh, lduw);
23  SPARC_LD_OP(ldsb, ldsb);  SPARC_LD_OP_S(ldsb, ldsb);
24  SPARC_LD_OP(ldsh, ldsw);  SPARC_LD_OP_S(ldsh, ldsw);
25    
26  /***                              Integer store                            ***/  /***                              Integer store                            ***/
27  SPARC_ST_OP(st, stl);  SPARC_ST_OP(st, stl);
# Line 68  void OPPROTO glue(op_lddf, MEMSUFFIX) (v Line 74  void OPPROTO glue(op_lddf, MEMSUFFIX) (v
74  {  {
75      DT0 = glue(ldfq, MEMSUFFIX)(T0);      DT0 = glue(ldfq, MEMSUFFIX)(T0);
76  }  }
77    
78    #ifdef TARGET_SPARC64
79    /* XXX: Should be Atomically */
80    /* XXX: There are no cas[x] instructions, only cas[x]a */
81    void OPPROTO glue(op_cas, MEMSUFFIX)(void)
82    {
83        uint32_t tmp;
84    
85        tmp = glue(ldl, MEMSUFFIX)(T0);
86        T2 &=  0xffffffffULL;
87        if (tmp == (T1 & 0xffffffffULL)) {
88            glue(stl, MEMSUFFIX)(T0, T2);
89        }
90        T2 = tmp;
91    }
92    
93    void OPPROTO glue(op_casx, MEMSUFFIX)(void)
94    {
95        uint64_t tmp;
96    
97        // XXX
98        tmp = (uint64_t)glue(ldl, MEMSUFFIX)(T0) << 32;
99        tmp |= glue(ldl, MEMSUFFIX)(T0);
100        if (tmp == T1) {
101            glue(stq, MEMSUFFIX)(T0, T2);
102        }
103        T2 = tmp;
104    }
105    
106    void OPPROTO glue(op_ldsw, MEMSUFFIX)(void)
107    {
108        T1 = (int64_t)glue(ldl, MEMSUFFIX)(T0);
109    }
110    
111    void OPPROTO glue(op_ldx, MEMSUFFIX)(void)
112    {
113        // XXX
114        T1 = (uint64_t)glue(ldl, MEMSUFFIX)(T0) << 32;
115        T1 |= glue(ldl, MEMSUFFIX)(T0);
116    }
117    
118    void OPPROTO glue(op_stx, MEMSUFFIX)(void)
119    {
120        glue(stl, MEMSUFFIX)(T0, T1 >> 32);
121        glue(stl, MEMSUFFIX)(T0, T1 & 0xffffffff);
122    }
123    #endif
124  #undef MEMSUFFIX  #undef MEMSUFFIX

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26