Skip to content

Instantly share code, notes, and snippets.

View ashafq's full-sized avatar

Ayan Shafqat ashafq

View GitHub Profile
@ashafq
ashafq / conv.c
Created June 1, 2017 00:20
Convert an array of float to int16_t
#include <stddef.h>
#include <assert.h>
#include <immintrin.h>
static void v_f32_to_s1x15i(int16_t *dst, const float *src, size_t len)
{
const __m128 minval = _mm_set1_ps(-1.0F);
const __m128 maxval = _mm_set1_ps(+0x7fffff8p-27F);
const __m128 scale = _mm_set1_ps(32768.0F);
/* I always wondered how variable length arguments worked in C.
* So, I just ended up implementing it in x86.
* NOTE: THIS CODE BELOW ONLY WORKS IN x86, AND NOT TESTED IN ANY OTHER ARCHITECTURE.
*
* To compile:
* gcc -Wall -o prog vargs.c && ./prog
* >> Testing: Hello world 10 -100
*/
/*
@ashafq
ashafq / Readme.md
Last active December 8, 2016 01:36
This is a simple example/tutorial on how to intermix assembly (x86_64) code with go.

The source files below should be arranged as:

./main.go
./sqrt/sqrt.s
./sqrt/sqrt.go

To run:

@ashafq
ashafq / tgabs.h
Last active December 8, 2016 02:21
How to write a type generic ABS() macro with GNU extension.
#ifndef ABS
#ifdef __GNUC__
#define ABS(x) __extension__({ \
__builtin_choose_expr( \
__builtin_types_compatible_p(__typeof__(x), long int), \
__builtin_labs(x), \
__builtin_choose_expr( \
__builtin_types_compatible_p(__typeof__(x), int), \
__builtin_abs(x), \
#!/usr/bin/env bash
#
# This program generates a header file that is needed to figure out number of
# bits in different integer types.
#
header_file=$1
binary=`mktemp`
header_base=`basename "${header_file}"`