ref: 920df845198f6d995ddeaab586526ab1ec3b9ccc
parent: 6b949925658e01e06a52c95d58d16bfc31d11912
author: Sigrid Solveig Haflínudóttir <ftrvxmtrx@gmail.com>
date: Wed Jul 14 08:39:37 EDT 2021
add clz and bswap32 builtins
--- a/builtins.amd64.s
+++ b/builtins.amd64.s
@@ -5,3 +5,13 @@
MOVL n+16(FP), CX
CLD; REP; MOVSB
RET
+
+TEXT __builtin_clz(SB),1,$0
+ BYTE $0x0F; BYTE $0xBD; BYTE $0xC5 /* BSRL RARG, AX */
+ XORL $31, AX
+ RET
+
+TEXT __builtin_bswap32(SB),1,$0
+ MOVQ RARG, AX
+ BYTE $0x0F; BYTE $0xC8 /* BSWAP32 AX */
+ RET
--- a/builtins.c
+++ b/builtins.c
@@ -1,0 +1,15 @@
+int
+__builtin_clz(unsigned int x)
+{
+ unsigned int r;
+ if(x == 0)
+ return 32;
+ for(r = 0; (x & (1UL<<31)) == 0; x <<= 1, r++);
+ return r;
+}
+
+unsigned int
+__builtin_bswap32(unsigned int x)
+{
+ return ((x >> 24) & 0xff) | ((x >> 8) & 0xff00) | ((x << 8) & 0xff0000) | ((x & 0xff) << 24);
+}
--- a/hj264.c
+++ b/hj264.c
@@ -1,8 +1,6 @@
+#include "builtins.h"
#define MINIH264_IMPLEMENTATION
#define H264E_MAX_THREADS 7
-#ifdef __amd64__
-#define memcpy memcpyf
-#endif
#include "minih264e.h"
#include <thread.h>
#include <bio.h>
--- a/minih264e.h
+++ b/minih264e.h
@@ -8111,6 +8111,9 @@
/************************************************************************/
#ifndef __arm__
+#if defined(__GNUC__) || defined(__clang__) || defined(__aarch64__)
+#define __clz(v) __builtin_clz(v)
+#else
/**
* Count of leading zeroes
*/
@@ -8120,8 +8123,6 @@
unsigned long nbit;
_BitScanReverse(&nbit, v);
return 31 - nbit;
-#elif defined(__GNUC__) || defined(__clang__) || defined(__aarch64__)
- return __builtin_clz(v);
#else
unsigned clz = 32;
assert(v);
@@ -8132,6 +8133,7 @@
return clz;
#endif
}
+#endif
#endif
/**
--- a/mkfile
+++ b/mkfile
@@ -1,6 +1,6 @@
</$objtype/mkfile
-CFLAGS=$CFLAGS -p -I/sys/include/npe -D__plan9__ -D__${objtype}__
+CFLAGS=$CFLAGS -p -I/sys/include/npe -D__plan9__ -D__${objtype}__ -D__clang__
BIN=/$objtype/bin/video
TARG=hj264