Skip to content

Instantly share code, notes, and snippets.

View ashafq's full-sized avatar

Ayan Shafqat ashafq

View GitHub Profile
#!/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}"`
@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), \
@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:

/* 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 / 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);
#include <stddef.h>
#include <xmmintrin.h>
void biquad_proc_x4(const float *coeff,
float *state,
float *io,
size_t len)
{
// Set up pointers
const __m128 *vcoeff = (__m128 *) __builtin_assume_aligned(coeff, 16);
@ashafq
ashafq / l33t.py
Last active June 30, 2017 12:49
1337 §p€@k
__module_name__ = "Hexchat L33T"
__module_version__ = "1.0"
__module_description__ = "Do you speak l33t? No? Well, now you can with /l33t"
__author__ = "ashafq"
import hexchat
import random
def l33t_enc(string):
@ashafq
ashafq / rdtsc.rs
Last active April 5, 2018 22:03
Works on rustc 1.27.0-nightly (fb44b4c0e 2018-04-04)
#![feature(asm)]
fn rdtsc() -> u64 {
let eax: u32;
let edx: u32;
unsafe {
asm!("rdtsc; ": /* Assembly */
"={eax}"(eax), "={edx}"(edx) : /* Output registers */
: /* Input registers */
@ashafq
ashafq / main.c
Last active October 27, 2023 15:51
/*
* This work is released under the Creative Commons CC0 1.0 Universal License.
*
* Must compile with GCC for x86_64 target:
* gcc -fno-pie -fno-stack-protector -o hello hello.c && ./hello
*
* Last tested: 2023-10-27, on gcc-13.2
* https://godbolt.org/z/o8o97Pjca
*/
#!/usr/bin/env python2
"""Display a rainbow color gradiant"""
from __future__ import print_function
from collections import namedtuple
__activity_ctx = 0.0
Color = namedtuple("Color", ["red", "green", "blue"])
def rainbow(seed=0, frequency=0.01):
"""Return a color"""