| /* |
| * Copyright (c) 2020 Cobham Gaisler AB |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef _FLOAT_REGS_SPARC_H |
| #define _FLOAT_REGS_SPARC_H |
| |
| #include <zephyr/toolchain.h> |
| #include "float_context.h" |
| |
| static inline void _load_all_float_registers(struct fp_register_set *regs) |
| { |
| __asm__ volatile ( |
| "ldd [%0 + 0x00], %%f0\n" |
| "ldd [%0 + 0x08], %%f2\n" |
| "ldd [%0 + 0x10], %%f4\n" |
| "ldd [%0 + 0x18], %%f6\n" |
| "ldd [%0 + 0x20], %%f8\n" |
| "ldd [%0 + 0x28], %%f10\n" |
| "ldd [%0 + 0x30], %%f12\n" |
| "ldd [%0 + 0x38], %%f14\n" |
| "ldd [%0 + 0x40], %%f16\n" |
| "ldd [%0 + 0x48], %%f18\n" |
| "ldd [%0 + 0x50], %%f20\n" |
| "ldd [%0 + 0x58], %%f22\n" |
| "ldd [%0 + 0x60], %%f24\n" |
| "ldd [%0 + 0x68], %%f26\n" |
| "ldd [%0 + 0x70], %%f28\n" |
| "ldd [%0 + 0x78], %%f30\n" |
| : |
| : "r" (®s->fp_volatile) |
| ); |
| } |
| |
| static inline void _store_all_float_registers(struct fp_register_set *regs) |
| { |
| __asm__ volatile ( |
| "std %%f0, [%0 + 0x00]\n" |
| "std %%f2, [%0 + 0x08]\n" |
| "std %%f4, [%0 + 0x10]\n" |
| "std %%f6, [%0 + 0x18]\n" |
| "std %%f8, [%0 + 0x20]\n" |
| "std %%f10, [%0 + 0x28]\n" |
| "std %%f12, [%0 + 0x30]\n" |
| "std %%f14, [%0 + 0x38]\n" |
| "std %%f16, [%0 + 0x40]\n" |
| "std %%f18, [%0 + 0x48]\n" |
| "std %%f20, [%0 + 0x50]\n" |
| "std %%f22, [%0 + 0x58]\n" |
| "std %%f24, [%0 + 0x60]\n" |
| "std %%f26, [%0 + 0x68]\n" |
| "std %%f28, [%0 + 0x70]\n" |
| "std %%f30, [%0 + 0x78]\n" |
| : |
| : "r" (®s->fp_volatile) |
| : "memory" |
| ); |
| } |
| |
| static inline void _load_then_store_all_float_registers(struct fp_register_set |
| *regs) |
| { |
| _load_all_float_registers(regs); |
| _store_all_float_registers(regs); |
| } |
| #endif /* _FLOAT_REGS_SPARC_H */ |