packages/library/aarch64asm
a

aarch64asm

v88a709alibrary

No description provided.

0 stars0 forksGPL-2.0updated 7 months ago
Open repo

aarch64 assembler for odin developed for my wasm-runtime

At compilation it parses ARM's machine readable spec and generates odin procedures to encode aarch64 instructions

list of instructions to generate is in ./instructions_to_generate.txt

Example

compile_fibonacci :: proc(a: ^Assembler) {
    num1 := x(1)
    num2 := x(2)
    next := x(3)
    n := x(0)
    i := x(4)
    mov(a, num1, 0)
    mov(a, num2, 1)
    mov(a, next, 0)
    mov(a, i, 3)

    loop_body := create_label(a)
    loop_cond := create_label(a)
    loop_end := create_label(a)

    set_label(a, loop_cond) 
        cmp(a, i, n, Shift.LSL, 0)
        b(a, Cond.GT, loop_end)
    
    set_label(a, loop_body)
        add(a, next, num1, num2, Shift.LSL)
        mov(a, num1, num2)
        mov(a, num2, next)
        add(a, i, i, 1) 
        b(a, loop_cond)
    set_label(a, loop_end)
        mov(a, x(0), next)
        ret(a, x(30))
}
main :: proc() {
	a: Assembler = {}

	init_asm(&a)
    compile_fibonacci(&a)
    assemble(&a)

    block, err := virtual.memory_block_alloc(4096, 4096, 32)
    copy(block.base[:len(a.bytes)*4], (cast([^]u8)&a.bytes[0])[:len(a.bytes)*4])
    virtual.protect(transmute(rawptr)(transmute(u64)(block.base) & (~u64(0xFFF))), 4096, {.Read, .Write, .Execute})

    fibonacci := transmute(proc "c" (n1: i64) -> i64)block.base

    fmt.println(fibonacci(20))
}
Package Info
Version
v88a709a
License
GPL-2.0
Author
@xb-bx
Type
library
Forks
0
Created
7 months ago
Updated
7 months ago
Health
maintained
has releases
has readme
has license
Maintainer
xb-bx
xb-bx
Maintainer
Activity
last 56 weeks