Allow a couple more swab implementation details through.

We hadn't spotted these before because no-one's using them, but C23 makes
the use of undeclared identifiers (in the also-unused caller) an error.

Change-Id: Iad5f364424e5621280d679aa2530e0e872abbb85
diff --git a/libc/kernel/uapi/asm-x86/asm/swab.h b/libc/kernel/uapi/asm-x86/asm/swab.h
index 31c850d..ce43658 100644
--- a/libc/kernel/uapi/asm-x86/asm/swab.h
+++ b/libc/kernel/uapi/asm-x86/asm/swab.h
@@ -8,9 +8,27 @@
 #define _ASM_X86_SWAB_H
 #include <linux/types.h>
 #include <linux/compiler.h>
+static inline __attribute__((__const__)) __u32 __arch_swab32(__u32 val) {
+  asm("bswapl %0" : "=r" (val) : "0" (val));
+  return val;
+}
 #define __arch_swab32 __arch_swab32
+static inline __attribute__((__const__)) __u64 __arch_swab64(__u64 val) {
 #ifdef __i386__
+  union {
+    struct {
+      __u32 a;
+      __u32 b;
+    } s;
+    __u64 u;
+  } v;
+  v.u = val;
+  asm("bswapl %0; bswapl %1; xchgl %0,%1" : "=r" (v.s.a), "=r" (v.s.b) : "0" (v.s.a), "1" (v.s.b));
+  return v.u;
 #else
+  asm("bswapq %0" : "=r" (val) : "0" (val));
+  return val;
 #endif
+}
 #define __arch_swab64 __arch_swab64
 #endif