Use when explaining System V AMD64, ARM AAPCS, RISC-V psABI, stack frames, variadic calls, or FFI register rules. Not for the Rust FFI binding layer: use rust-ffi.
The English summary is being prepared. Showing the original description.
Use when reading GCC or Clang x86-64 assembly, writing inline asm, decoding AT&T syntax, or applying System V AMD64 register rules. Not for SIMD intrinsic selection: use simd-intrinsics.
The English summary is being prepared. Showing the original description.
See how to installReview the instructions the agent will receive before you install.
GCC and Clang emit AT&T syntax by default. This skill reads that output, writes inline asm, and keeps register use inside the System V AMD64 ABI.
| Field | Bound contract |
|---|---|
| Trigger | The task reads compiler assembly output, writes inline asm in C or C++, decides AT&T versus Intel syntax, or explains calling conventions and stack layout in a disassembly. |
| Authority | Read-only. The skill explains and drafts; edits land through the normal coding path. No remote mutation. |
| Side effect | None. |
| Done | The drafted assembly assembles with gcc -c or clang -c, or the compiler output under discussion is explained register by register. |
gcc -O2 -S -fverbose-asm foo.c -o foo.s
gcc -O2 -c foo.c -o foo.o && objdump -d -M intel foo.o
| Register | 32-bit view | Role |
|---|---|---|
rax | eax | Accumulator, 1st return value, caller saved |
rbx | ebx | Base, callee saved |
rcx | ecx | 4th argument, caller saved |
rdx | edx | 3rd argument, 2nd return value, caller saved |
rsi | esi | 2nd argument, caller saved |
rdi | edi | 1st argument, caller saved |
rbp | ebp | Frame pointer, callee saved |
rsp | esp | Stack pointer |
r8 to r11 | 5th through 8th arguments, caller saved | |
r12 to r15 | Callee saved | |
rflags | flags | Condition codes |
xmm0 to xmm7 | FP and SIMD arguments and returns | |
xmm8 to xmm15 | FP and SIMD scratch, caller saved |
System V argument order: integer and pointer args in rdi, rsi, rdx, rcx, r8, r9, then the stack; float and vector args in xmm0 to xmm7.
rsp stays 16-byte aligned before a call, because the call pushes 8 bytes and the callee expects alignment. The red zone is the 128 bytes below rsp that leaf functions may use without adjusting rsp. Kernel code compiles with -mno-red-zone because interrupts do not honor it. Done when: the drafted prologue keeps the alignment and names the red-zone choice.push rbp
mov rbp, rsp
sub rsp, 16 # keep rsp a multiple of 16 before call sites
| Pattern | Meaning |
|---|---|
mov %rdi, -8(%rbp) | Store the first argument to a local slot |
mov (%rdi), %rax | Load 8 bytes from the address in rdi |
lea 8(%rdi), %rax | Compute an address without memory access |
addq $8, %rdi | Advance a pointer by one element |
push %rbp then pop %rbp | Frame save and restore |
call func then ret | Call pushes the return address, ret pops it |
leave | mov %rbp, %rsp then pop %rbp |
test %rax, %rax | Set flags from rax == 0 cheaply |
cmp $0, %rax | Same flag result, one byte longer |
sete %al | Copy ZF into a byte register |
cmovne %rdx, %rax | Conditional move, branchless select |
| AT&T | Intel |
|---|---|
mov %rax, %rbx | mov rbx, rax |
mov $8, %rax | mov rax, 8 |
movb %al, (%rdi) | mov byte ptr [rdi], al |
| Default in GCC | -masm=intel or objdump -M intel |
r general register, a/b/c/d specific ones, m memory, i immediate. Tell the compiler about memory effects with "memory". Done when: the fragment compiles and survives optimization with correct results.static inline long cpuid_leaf(long leaf) {
long a, b, c, d;
__asm__ volatile("cpuid"
: "=a"(a), "=b"(b), "=c"(c), "=d"(d)
: "a"(leaf));
return a;
}
static inline int atomic_incr(int *p) {
int ret;
__asm__ volatile("lock xaddl %0, %1"
: "=r"(ret), "+m"(*p) // +m: read and written
: "0"(1));
return ret; // returns the previous value
}
<xmmintrin.h> provides SSE, <emmintrin.h> SSE2, and <immintrin.h> everything through AVX-512. For choosing and writing intrinsics use simd-intrinsics. Done when: vector code under discussion is attributed to its instruction set level.| Failure class | Behavior |
|---|---|
Crash after a call in hand-written asm | Stack misalignment. Re-align rsp to 16 before every call site. |
Inline asm result wrong at -O2 | Missing volatile, a wrong constraint, or a missing "memory" clobber. Fix the declaration, not the build flags. |
lock prefix rejected | The destination is a register or the assembler is 16-bit mode. lock needs a memory destination. |
| Intel-syntax source fails to build | The file mixes syntaxes. Convert with objdump -M intel as reference, and compile with one syntax. |
| Value lost across a call | It sat in a caller-saved register. Move it to rbx, r12 to r15, or spill it. |
Annotated assembly or inline asm with register roles, stack alignment stated, and clobbers justified. The full instruction tables, flags register map, conditional jump list, and prologue patterns are in references/reference.md.
No reviews yet. Tell others what you thought.
No login needed. Share how it worked for you, ask a question, or note where it did not run.
No comments yet. Be the first to write one.
Use when explaining System V AMD64, ARM AAPCS, RISC-V psABI, stack frames, variadic calls, or FFI register rules. Not for the Rust FFI binding layer: use rust-ffi.
The English summary is being prepared. Showing the original description.
Use when configuring ADC sampling time, DMA-driven ADC, calibration, or DAC channel setup on bare-metal MCUs. Not for the DMA stream itself: use dma-baremetal.
The English summary is being prepared. Showing the original description.
Use when creating AF_XDP sockets, configuring UMEM and XSK rings, writing an XDP redirect program, or choosing copy versus zero-copy mode. Not for full kernel bypass: use dpdk.
The English summary is being prepared. Showing the original description.
Use when a completed session needs an agent-environment retrospective. Not for an engineering retrospective from telemetry: use engineering-retrospective.
The English summary is being prepared. Showing the original description.
Use when a redacted, trimmed agent transcript must be appended to a GitHub PR or issue body, with human approval and preview. Not for automated or model-initiated insertion.
The English summary is being prepared. Showing the original description.
Use when a repo needs agent setup, AGENTS.md added or made lean, CLAUDE.md audited, or agent instructions scored or pruned. Not for remote, credential, publish, deploy, or irreversible changes.
The English summary is being prepared. Showing the original description.