inline-assembly

ARM inline assembly - specify individual register as constraint

Hi! in x86 inline assembly i can write something like this: asm ("cpuid" : "=a" (_eax), "=b" (_ebx), "=c" (_ecx), "=d" (_edx) : "a" (op)); so in the matchin constraints instead of just writing "=r" and let the compiler chose the register, I can say which particular reg...

how to set control register 0 (cr0) bits in x86-64 using gcc assembly on linux

I am using the following code to set the cr0 bit to disable cache. When I compile this #include <stdio.h> int main() { __asm__("pushl %eax\n\t" "mov %cr0,%eax;\n\t" "orl $(1 << 30),%eax;\n\t" "mov %eax,%cr0;\n\t" "wbinvd\n\t" "popl %eax"...

How do I wrap a non-standard calling convention in C?

Without getting into specifics, say I need to make use of a non-standard calling convention from C code. Functions that use this convention may return multiple values on the stack. It would be simple to put each function in a wrapper that uses inline assembly to make the call, sending output via pointer parameters given to the wrapper. U...

Leading zeros calculation with intrinsic function

I'm trying to optimize some code working in an embedded system (FLAC decoding, Windows CE, ARM 926 MCU). The default implementation uses a macro and a lookup table: /* counts the # of zero MSBs in a word */ #define COUNT_ZERO_MSBS(word) ( \ (word) <= 0xffff ? \ ( (word) <= 0xff? byte_to_unary_table[word] + 24 : \ byte_...

Get char at index location in char array Assembly X86 embedded

Hello, I am having a lot of trouble accessing a value in an array of chars at a specific location. I am using inline-assembly in C++ and using visual studio (if that is of any help). Here is my code: char* addTwoStringNumbers(char *num1) { // here is what I have tried so far: movzx eax, num1[3]; mov al, [eax] } When I debu...

X86 inline assembly, writing into C array

Assembly info: Using Visual Studio 2010 to write inline assembly embedded into C Hello, I am trying to write into an array of chars in C and trying to mimic the action of this C code: resNum[posNum3] = currNum3 + '0'; currently this is what i have: mov ebx, posNum3; mov resNum[ebx], edx; //edx is currNum3 add resNum[ebx], 48; // a...