Revision e9c71dd1 target-mips/op_helper.c

b/target-mips/op_helper.c
172 172
    env->HI[0][env->current_tc] = (int32_t)(HILO >> 32);
173 173
}
174 174

  
175
static always_inline void set_HIT0_LO (uint64_t HILO)
176
{
177
    env->LO[0][env->current_tc] = (int32_t)(HILO & 0xFFFFFFFF);
178
    T0 = env->HI[0][env->current_tc] = (int32_t)(HILO >> 32);
179
}
180

  
181
static always_inline void set_HI_LOT0 (uint64_t HILO)
182
{
183
    T0 = env->LO[0][env->current_tc] = (int32_t)(HILO & 0xFFFFFFFF);
184
    env->HI[0][env->current_tc] = (int32_t)(HILO >> 32);
185
}
186

  
175 187
void do_mult (void)
176 188
{
177 189
    set_HILO((int64_t)(int32_t)T0 * (int64_t)(int32_t)T1);
......
213 225
    tmp = ((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1);
214 226
    set_HILO(get_HILO() - tmp);
215 227
}
216
#endif
228

  
229
/* Multiplication variants of the vr54xx. */
230
void do_muls (void)
231
{
232
    set_HI_LOT0(0 - ((int64_t)(int32_t)T0 * (int64_t)(int32_t)T1));
233
}
234

  
235
void do_mulsu (void)
236
{
237
    set_HI_LOT0(0 - ((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1));
238
}
239

  
240
void do_macc (void)
241
{
242
    set_HI_LOT0(((int64_t)get_HILO()) + ((int64_t)(int32_t)T0 * (int64_t)(int32_t)T1));
243
}
244

  
245
void do_macchi (void)
246
{
247
    set_HIT0_LO(((int64_t)get_HILO()) + ((int64_t)(int32_t)T0 * (int64_t)(int32_t)T1));
248
}
249

  
250
void do_maccu (void)
251
{
252
    set_HI_LOT0(((uint64_t)get_HILO()) + ((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1));
253
}
254

  
255
void do_macchiu (void)
256
{
257
    set_HIT0_LO(((uint64_t)get_HILO()) + ((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1));
258
}
259

  
260
void do_msac (void)
261
{
262
    set_HI_LOT0(((int64_t)get_HILO()) - ((int64_t)(int32_t)T0 * (int64_t)(int32_t)T1));
263
}
264

  
265
void do_msachi (void)
266
{
267
    set_HIT0_LO(((int64_t)get_HILO()) - ((int64_t)(int32_t)T0 * (int64_t)(int32_t)T1));
268
}
269

  
270
void do_msacu (void)
271
{
272
    set_HI_LOT0(((uint64_t)get_HILO()) - ((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1));
273
}
274

  
275
void do_msachiu (void)
276
{
277
    set_HIT0_LO(((uint64_t)get_HILO()) - ((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1));
278
}
279

  
280
void do_mulhi (void)
281
{
282
    set_HIT0_LO((int64_t)(int32_t)T0 * (int64_t)(int32_t)T1);
283
}
284

  
285
void do_mulhiu (void)
286
{
287
    set_HIT0_LO((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1);
288
}
289

  
290
void do_mulshi (void)
291
{
292
    set_HIT0_LO(0 - ((int64_t)(int32_t)T0 * (int64_t)(int32_t)T1));
293
}
294

  
295
void do_mulshiu (void)
296
{
297
    set_HIT0_LO(0 - ((uint64_t)(uint32_t)T0 * (uint64_t)(uint32_t)T1));
298
}
299
#endif /* TARGET_LONG_BITS > HOST_LONG_BITS */
217 300

  
218 301
#if HOST_LONG_BITS < 64
219 302
void do_div (void)

Also available in: Unified diff