diff options
Diffstat (limited to 'arch/mips/include/asm/mipsregs.h')
-rw-r--r-- | arch/mips/include/asm/mipsregs.h | 107 |
1 files changed, 17 insertions, 90 deletions
diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h index 918c576bf9ec..3a062ae933a4 100644 --- a/arch/mips/include/asm/mipsregs.h +++ b/arch/mips/include/asm/mipsregs.h | |||
@@ -2282,7 +2282,6 @@ do { \ | |||
2282 | 2282 | ||
2283 | #else | 2283 | #else |
2284 | 2284 | ||
2285 | #ifdef CONFIG_CPU_MICROMIPS | ||
2286 | #define rddsp(mask) \ | 2285 | #define rddsp(mask) \ |
2287 | ({ \ | 2286 | ({ \ |
2288 | unsigned int __res; \ | 2287 | unsigned int __res; \ |
@@ -2291,8 +2290,8 @@ do { \ | |||
2291 | " .set push \n" \ | 2290 | " .set push \n" \ |
2292 | " .set noat \n" \ | 2291 | " .set noat \n" \ |
2293 | " # rddsp $1, %x1 \n" \ | 2292 | " # rddsp $1, %x1 \n" \ |
2294 | " .hword ((0x0020067c | (%x1 << 14)) >> 16) \n" \ | 2293 | _ASM_INSN_IF_MIPS(0x7c000cb8 | (%x1 << 16)) \ |
2295 | " .hword ((0x0020067c | (%x1 << 14)) & 0xffff) \n" \ | 2294 | _ASM_INSN32_IF_MM(0x0020067c | (%x1 << 14)) \ |
2296 | " move %0, $1 \n" \ | 2295 | " move %0, $1 \n" \ |
2297 | " .set pop \n" \ | 2296 | " .set pop \n" \ |
2298 | : "=r" (__res) \ | 2297 | : "=r" (__res) \ |
@@ -2307,22 +2306,22 @@ do { \ | |||
2307 | " .set noat \n" \ | 2306 | " .set noat \n" \ |
2308 | " move $1, %0 \n" \ | 2307 | " move $1, %0 \n" \ |
2309 | " # wrdsp $1, %x1 \n" \ | 2308 | " # wrdsp $1, %x1 \n" \ |
2310 | " .hword ((0x0020167c | (%x1 << 14)) >> 16) \n" \ | 2309 | _ASM_INSN_IF_MIPS(0x7c2004f8 | (%x1 << 11)) \ |
2311 | " .hword ((0x0020167c | (%x1 << 14)) & 0xffff) \n" \ | 2310 | _ASM_INSN32_IF_MM(0x0020167c | (%x1 << 14)) \ |
2312 | " .set pop \n" \ | 2311 | " .set pop \n" \ |
2313 | : \ | 2312 | : \ |
2314 | : "r" (val), "i" (mask)); \ | 2313 | : "r" (val), "i" (mask)); \ |
2315 | } while (0) | 2314 | } while (0) |
2316 | 2315 | ||
2317 | #define _umips_dsp_mfxxx(ins) \ | 2316 | #define _dsp_mfxxx(ins) \ |
2318 | ({ \ | 2317 | ({ \ |
2319 | unsigned long __treg; \ | 2318 | unsigned long __treg; \ |
2320 | \ | 2319 | \ |
2321 | __asm__ __volatile__( \ | 2320 | __asm__ __volatile__( \ |
2322 | " .set push \n" \ | 2321 | " .set push \n" \ |
2323 | " .set noat \n" \ | 2322 | " .set noat \n" \ |
2324 | " .hword 0x0001 \n" \ | 2323 | _ASM_INSN_IF_MIPS(0x00000810 | %X1) \ |
2325 | " .hword %x1 \n" \ | 2324 | _ASM_INSN32_IF_MM(0x0001007c | %x1) \ |
2326 | " move %0, $1 \n" \ | 2325 | " move %0, $1 \n" \ |
2327 | " .set pop \n" \ | 2326 | " .set pop \n" \ |
2328 | : "=r" (__treg) \ | 2327 | : "=r" (__treg) \ |
@@ -2330,101 +2329,28 @@ do { \ | |||
2330 | __treg; \ | 2329 | __treg; \ |
2331 | }) | 2330 | }) |
2332 | 2331 | ||
2333 | #define _umips_dsp_mtxxx(val, ins) \ | 2332 | #define _dsp_mtxxx(val, ins) \ |
2334 | do { \ | 2333 | do { \ |
2335 | __asm__ __volatile__( \ | 2334 | __asm__ __volatile__( \ |
2336 | " .set push \n" \ | 2335 | " .set push \n" \ |
2337 | " .set noat \n" \ | 2336 | " .set noat \n" \ |
2338 | " move $1, %0 \n" \ | 2337 | " move $1, %0 \n" \ |
2339 | " .hword 0x0001 \n" \ | 2338 | _ASM_INSN_IF_MIPS(0x00200011 | %X1) \ |
2340 | " .hword %x1 \n" \ | 2339 | _ASM_INSN32_IF_MM(0x0001207c | %x1) \ |
2341 | " .set pop \n" \ | 2340 | " .set pop \n" \ |
2342 | : \ | 2341 | : \ |
2343 | : "r" (val), "i" (ins)); \ | 2342 | : "r" (val), "i" (ins)); \ |
2344 | } while (0) | 2343 | } while (0) |
2345 | 2344 | ||
2346 | #define _umips_dsp_mflo(reg) _umips_dsp_mfxxx((reg << 14) | 0x107c) | 2345 | #ifdef CONFIG_CPU_MICROMIPS |
2347 | #define _umips_dsp_mfhi(reg) _umips_dsp_mfxxx((reg << 14) | 0x007c) | ||
2348 | |||
2349 | #define _umips_dsp_mtlo(val, reg) _umips_dsp_mtxxx(val, ((reg << 14) | 0x307c)) | ||
2350 | #define _umips_dsp_mthi(val, reg) _umips_dsp_mtxxx(val, ((reg << 14) | 0x207c)) | ||
2351 | |||
2352 | #define mflo0() _umips_dsp_mflo(0) | ||
2353 | #define mflo1() _umips_dsp_mflo(1) | ||
2354 | #define mflo2() _umips_dsp_mflo(2) | ||
2355 | #define mflo3() _umips_dsp_mflo(3) | ||
2356 | |||
2357 | #define mfhi0() _umips_dsp_mfhi(0) | ||
2358 | #define mfhi1() _umips_dsp_mfhi(1) | ||
2359 | #define mfhi2() _umips_dsp_mfhi(2) | ||
2360 | #define mfhi3() _umips_dsp_mfhi(3) | ||
2361 | 2346 | ||
2362 | #define mtlo0(x) _umips_dsp_mtlo(x, 0) | 2347 | #define _dsp_mflo(reg) _dsp_mfxxx((reg << 14) | 0x1000) |
2363 | #define mtlo1(x) _umips_dsp_mtlo(x, 1) | 2348 | #define _dsp_mfhi(reg) _dsp_mfxxx((reg << 14) | 0x0000) |
2364 | #define mtlo2(x) _umips_dsp_mtlo(x, 2) | ||
2365 | #define mtlo3(x) _umips_dsp_mtlo(x, 3) | ||
2366 | 2349 | ||
2367 | #define mthi0(x) _umips_dsp_mthi(x, 0) | 2350 | #define _dsp_mtlo(val, reg) _dsp_mtxxx(val, ((reg << 14) | 0x1000)) |
2368 | #define mthi1(x) _umips_dsp_mthi(x, 1) | 2351 | #define _dsp_mthi(val, reg) _dsp_mtxxx(val, ((reg << 14) | 0x0000)) |
2369 | #define mthi2(x) _umips_dsp_mthi(x, 2) | ||
2370 | #define mthi3(x) _umips_dsp_mthi(x, 3) | ||
2371 | 2352 | ||
2372 | #else /* !CONFIG_CPU_MICROMIPS */ | 2353 | #else /* !CONFIG_CPU_MICROMIPS */ |
2373 | #define rddsp(mask) \ | ||
2374 | ({ \ | ||
2375 | unsigned int __res; \ | ||
2376 | \ | ||
2377 | __asm__ __volatile__( \ | ||
2378 | " .set push \n" \ | ||
2379 | " .set noat \n" \ | ||
2380 | " # rddsp $1, %x1 \n" \ | ||
2381 | " .word 0x7c000cb8 | (%x1 << 16) \n" \ | ||
2382 | " move %0, $1 \n" \ | ||
2383 | " .set pop \n" \ | ||
2384 | : "=r" (__res) \ | ||
2385 | : "i" (mask)); \ | ||
2386 | __res; \ | ||
2387 | }) | ||
2388 | |||
2389 | #define wrdsp(val, mask) \ | ||
2390 | do { \ | ||
2391 | __asm__ __volatile__( \ | ||
2392 | " .set push \n" \ | ||
2393 | " .set noat \n" \ | ||
2394 | " move $1, %0 \n" \ | ||
2395 | " # wrdsp $1, %x1 \n" \ | ||
2396 | " .word 0x7c2004f8 | (%x1 << 11) \n" \ | ||
2397 | " .set pop \n" \ | ||
2398 | : \ | ||
2399 | : "r" (val), "i" (mask)); \ | ||
2400 | } while (0) | ||
2401 | |||
2402 | #define _dsp_mfxxx(ins) \ | ||
2403 | ({ \ | ||
2404 | unsigned long __treg; \ | ||
2405 | \ | ||
2406 | __asm__ __volatile__( \ | ||
2407 | " .set push \n" \ | ||
2408 | " .set noat \n" \ | ||
2409 | " .word (0x00000810 | %1) \n" \ | ||
2410 | " move %0, $1 \n" \ | ||
2411 | " .set pop \n" \ | ||
2412 | : "=r" (__treg) \ | ||
2413 | : "i" (ins)); \ | ||
2414 | __treg; \ | ||
2415 | }) | ||
2416 | |||
2417 | #define _dsp_mtxxx(val, ins) \ | ||
2418 | do { \ | ||
2419 | __asm__ __volatile__( \ | ||
2420 | " .set push \n" \ | ||
2421 | " .set noat \n" \ | ||
2422 | " move $1, %0 \n" \ | ||
2423 | " .word (0x00200011 | %1) \n" \ | ||
2424 | " .set pop \n" \ | ||
2425 | : \ | ||
2426 | : "r" (val), "i" (ins)); \ | ||
2427 | } while (0) | ||
2428 | 2354 | ||
2429 | #define _dsp_mflo(reg) _dsp_mfxxx((reg << 21) | 0x0002) | 2355 | #define _dsp_mflo(reg) _dsp_mfxxx((reg << 21) | 0x0002) |
2430 | #define _dsp_mfhi(reg) _dsp_mfxxx((reg << 21) | 0x0000) | 2356 | #define _dsp_mfhi(reg) _dsp_mfxxx((reg << 21) | 0x0000) |
@@ -2432,6 +2358,8 @@ do { \ | |||
2432 | #define _dsp_mtlo(val, reg) _dsp_mtxxx(val, ((reg << 11) | 0x0002)) | 2358 | #define _dsp_mtlo(val, reg) _dsp_mtxxx(val, ((reg << 11) | 0x0002)) |
2433 | #define _dsp_mthi(val, reg) _dsp_mtxxx(val, ((reg << 11) | 0x0000)) | 2359 | #define _dsp_mthi(val, reg) _dsp_mtxxx(val, ((reg << 11) | 0x0000)) |
2434 | 2360 | ||
2361 | #endif /* CONFIG_CPU_MICROMIPS */ | ||
2362 | |||
2435 | #define mflo0() _dsp_mflo(0) | 2363 | #define mflo0() _dsp_mflo(0) |
2436 | #define mflo1() _dsp_mflo(1) | 2364 | #define mflo1() _dsp_mflo(1) |
2437 | #define mflo2() _dsp_mflo(2) | 2365 | #define mflo2() _dsp_mflo(2) |
@@ -2452,7 +2380,6 @@ do { \ | |||
2452 | #define mthi2(x) _dsp_mthi(x, 2) | 2380 | #define mthi2(x) _dsp_mthi(x, 2) |
2453 | #define mthi3(x) _dsp_mthi(x, 3) | 2381 | #define mthi3(x) _dsp_mthi(x, 3) |
2454 | 2382 | ||
2455 | #endif /* CONFIG_CPU_MICROMIPS */ | ||
2456 | #endif | 2383 | #endif |
2457 | 2384 | ||
2458 | /* | 2385 | /* |