43 #ifndef LS_IGNORE_OFFSET 47 unsigned char data[1];
50 unsigned char data[2];
53 unsigned char data[4];
56 unsigned char data[8];
58 uint64_t
addr = *((uint64_t *)ic->arg[1]);
61 addr += (int32_t)ic->arg[2];
70 fatal(
"store failed: TODO\n");
76 data_x += (data[1] << 8);
78 data_x += (data[2] << 16);
79 data_x += ((uint64_t)data[3] << 24);
81 data_x = (int64_t)(int32_t)data_x;
84 data_x += ((uint64_t)data[4] << 32);
85 data_x += ((uint64_t)data[5] << 40);
86 data_x += ((uint64_t)data[6] << 48);
87 data_x += ((uint64_t)data[7] << 56);
91 *((uint64_t *)ic->arg[0]) = data_x;
94 data_x = *((uint64_t *)ic->arg[0]);
97 data[1] = data_x >> 8;
99 data[2] = data_x >> 16;
100 data[3] = data_x >> 24;
102 data[4] = data_x >> 32;
103 data[5] = data_x >> 40;
104 data[6] = data_x >> 48;
105 data[7] = data_x >> 56;
110 if (!cpu->
memory_rw(cpu, cpu->
mem, addr, data,
sizeof(data),
112 fatal(
"store failed: TODO\n");
118 *((uint64_t *)ic->arg[0]) = 1;
127 static void LS_N(
struct cpu *cpu,
struct alpha_instr_call *ic)
130 uint64_t addr = (*((uint64_t *)ic->arg[1]))
132 + (int32_t)ic->arg[2]
139 uint32_t x1, x2, x3, c;
147 l2 = cpu->
cd.DYNTRANS_ARCH.l1_64[x1];
152 page = l3->host_load[x3];
154 page = l3->host_store[x3];
173 *((uint64_t *)ic->arg[0]) = 0;
201 #ifdef HOST_BIG_ENDIAN 205 data_x += (page[c+1] << 8);
207 data_x += (page[c+2] << 16);
208 data_x += ((uint64_t)page[c+3] << 24);
210 data_x += ((uint64_t)page[c+4] << 32);
211 data_x += ((uint64_t)page[c+5] << 40);
212 data_x += ((uint64_t)page[c+6] << 48);
213 data_x += ((uint64_t)page[c+7] << 56);
218 *((uint64_t *)ic->arg[0]) = (int64_t)(int32_t)data_x;
220 *((uint64_t *)ic->arg[0]) = data_x;
224 *((uint64_t *)ic->arg[0]) = page[c];
227 uint16_t d = *((uint16_t *) (page + c));
228 *((uint64_t *)ic->arg[0]) = d;
231 int32_t d = *((int32_t *) (page + c));
232 *((uint64_t *)ic->arg[0]) = (int64_t)d;
235 uint64_t d = *((uint64_t *) (page + c));
236 *((uint64_t *)ic->arg[0]) = d;
241 #ifdef HOST_BIG_ENDIAN 242 uint64_t data_x = *((uint64_t *)ic->arg[0]);
245 page[c+1] = data_x >> 8;
247 page[c+2] = data_x >> 16;
248 page[c+3] = data_x >> 24;
250 page[c+4] = data_x >> 32;
251 page[c+5] = data_x >> 40;
252 page[c+6] = data_x >> 48;
253 page[c+7] = data_x >> 56;
260 page[c] = *((uint64_t *)ic->arg[0]);
263 uint32_t d = *((uint64_t *)ic->arg[0]);
264 *((uint16_t *) (page + c)) = d;
267 uint32_t d = *((uint64_t *)ic->arg[0]);
268 *((uint32_t *) (page + c)) = d;
271 uint64_t d = *((uint64_t *)ic->arg[0]);
272 *((uint64_t *) (page + c)) = d;
278 *((uint64_t *)ic->arg[0]) = 1;
void fatal(const char *fmt,...)
struct arm_instr_call * ic
#define DYNTRANS_L2_64_TABLE
int(* memory_rw)(struct cpu *cpu, struct memory *mem, uint64_t vaddr, unsigned char *data, size_t len, int writeflag, int cache_flags)
void LS_GENERIC_N(struct cpu *cpu, struct ppc_instr_call *ic)
addr & if(addr >=0x24 &&page !=NULL)
#define DYNTRANS_L3_64_TABLE
uint64_t load_linked_addr