18 #ifndef _COBALT_ARM64_ASM_UAPI_FPTEST_H 19 #define _COBALT_ARM64_ASM_UAPI_FPTEST_H 21 #define __COBALT_HAVE_FPU 0x1 30 #define fp_regs_set(__features, __val) \ 32 unsigned long long __e[32]; \ 35 if (__features & __COBALT_HAVE_FPU) { \ 37 for (__i = 0; __i < 32; __i++) \ 40 __asm__ __volatile__("ldp d0, d1, [%0, #8 * 0] \n" \ 41 "ldp d2, d3, [%0, #8 * 2] \n" \ 42 "ldp d4, d5, [%0, #8 * 4]\n" \ 43 "ldp d6, d7, [%0, #8 * 6]\n" \ 44 "ldp d8, d9, [%0, #8 * 8]\n" \ 45 "ldp d10, d11, [%0, #8 * 10]\n" \ 46 "ldp d12, d13, [%0, #8 * 12]\n" \ 47 "ldp d14, d15, [%0, #8 * 14]\n" \ 48 "ldp d16, d17, [%0, #8 * 16]\n" \ 49 "ldp d18, d19, [%0, #8 * 18]\n" \ 50 "ldp d20, d21, [%0, #8 * 20]\n" \ 51 "ldp d22, d23, [%0, #8 * 22]\n" \ 52 "ldp d24, d25, [%0, #8 * 24]\n" \ 53 "ldp d26, d27, [%0, #8 * 26]\n" \ 54 "ldp d28, d29, [%0, #8 * 28]\n" \ 55 "ldp d30, d31, [%0, #8 * 30]\n" \ 58 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", \ 59 "d7", "d8", "d9", "d10", "d11", "d12", "d13", \ 60 "d14", "d15", "d16", "d17", "d18", "d19", \ 61 "d20", "d21", "d22", "d23", "d24", "d25", \ 62 "d26", "d27", "d28", "d29", "d30", "d31", \ 67 #define fp_regs_check(__features, __val, __report) \ 69 unsigned int __result = (__val), __i; \ 70 unsigned long long __e[32]; \ 72 if (__features & __COBALT_HAVE_FPU) { \ 74 __asm__ __volatile__("stp d0, d1, [%0, #8 * 0] \n" \ 75 "stp d2, d3, [%0, #8 * 2] \n" \ 76 "stp d4, d5, [%0, #8 * 4]\n" \ 77 "stp d6, d7, [%0, #8 * 6]\n" \ 78 "stp d8, d9, [%0, #8 * 8]\n" \ 79 "stp d10, d11, [%0, #8 * 10]\n" \ 80 "stp d12, d13, [%0, #8 * 12]\n" \ 81 "stp d14, d15, [%0, #8 * 14]\n" \ 82 "stp d16, d17, [%0, #8 * 16]\n" \ 83 "stp d18, d19, [%0, #8 * 18]\n" \ 84 "stp d20, d21, [%0, #8 * 20]\n" \ 85 "stp d22, d23, [%0, #8 * 22]\n" \ 86 "stp d24, d25, [%0, #8 * 24]\n" \ 87 "stp d26, d27, [%0, #8 * 26]\n" \ 88 "stp d28, d29, [%0, #8 * 28]\n" \ 89 "stp d30, d31, [%0, #8 * 30]\n" \ 94 for (__i = 0; __i < 32; __i++) \ 95 if (__e[__i] != __val) { \ 96 __report("d%d: %llu != %u\n", \ 97 __i, __e[__i], __val); \ 98 __result = __e[__i]; \