Revision d8992825 target-mips/dsp_helper.c
b/target-mips/dsp_helper.c | ||
---|---|---|
2902 | 2902 |
return (target_ulong)rd; |
2903 | 2903 |
} |
2904 | 2904 |
|
2905 |
#define BIT_INSV(name, posfilter, sizefilter, ret_type) \
|
|
2905 |
#define BIT_INSV(name, posfilter, ret_type) \
|
|
2906 | 2906 |
target_ulong helper_##name(CPUMIPSState *env, target_ulong rs, \ |
2907 | 2907 |
target_ulong rt) \ |
2908 | 2908 |
{ \ |
2909 | 2909 |
uint32_t pos, size, msb, lsb; \ |
2910 |
target_ulong filter; \
|
|
2911 |
target_ulong temp, temprs, temprt; \
|
|
2910 |
uint32_t const sizefilter = 0x3F; \
|
|
2911 |
target_ulong temp; \
|
|
2912 | 2912 |
target_ulong dspc; \ |
2913 | 2913 |
\ |
2914 | 2914 |
dspc = env->active_tc.DSPControl; \ |
... | ... | |
2923 | 2923 |
return rt; \ |
2924 | 2924 |
} \ |
2925 | 2925 |
\ |
2926 |
filter = ((int64_t)0x01 << size) - 1; \ |
|
2927 |
filter = filter << pos; \ |
|
2928 |
temprs = (rs << pos) & filter; \ |
|
2929 |
temprt = rt & ~filter; \ |
|
2930 |
temp = temprs | temprt; \ |
|
2926 |
temp = deposit64(rt, pos, size, rs); \ |
|
2931 | 2927 |
\ |
2932 | 2928 |
return (target_long)(ret_type)temp; \ |
2933 | 2929 |
} |
2934 | 2930 |
|
2935 |
BIT_INSV(insv, 0x1F, 0x3F, int32_t);
|
|
2931 |
BIT_INSV(insv, 0x1F, int32_t); |
|
2936 | 2932 |
#ifdef TARGET_MIPS64 |
2937 |
BIT_INSV(dinsv, 0x7F, 0x3F, target_long);
|
|
2933 |
BIT_INSV(dinsv, 0x7F, target_long); |
|
2938 | 2934 |
#endif |
2939 | 2935 |
|
2940 | 2936 |
#undef BIT_INSV |
Also available in: Unified diff