Files
dexpr/docs/opcodes.md
2026-04-05 23:05:31 +03:00

3.5 KiB
Raw Permalink Blame History

Opcodes Modülü

Konum: src/opcodes.rs

Bytecode komut setini (instruction set) tanımlar. Her opcode bir u8 değerine karşılık gelir.


OpCodeByte Enum

Register Operasyonları

Opcode Değer ıklama
LoadConst 0x10 Sabit değeri register'a yükle
Move 0x11 Register'dan register'a kopyala

Bellek Operasyonları

Opcode Değer ıklama
LoadLocal 0x20 Yerel değişkeni register'a yükle (ayrılmış)
StoreLocal 0x21 Register'ı yerel değişkene kaydet (ayrılmış)
LoadGlobal 0x22 Global değişkeni register'a yükle
StoreGlobal 0x23 Register'ı global değişkene kaydet

Not: LoadLocal/StoreLocal opcode'ları tanımlıdır ancak şu an compiler tarafından emit edilmez. Tüm değişkenler global scope'tadır.

Aritmetik

Opcode Değer ıklama
Add 0x30 Toplama
Sub 0x31 Çıkarma
Mul 0x32 Çarpma
Div 0x33 Bölme
Neg 0x34 Negatif (tekli)
Mod 0x35 Mod alma
Pow 0x36 Üs alma

Karşılaştırma

Opcode Değer ıklama
Lt 0x40 Küçüktür
Lte 0x41 Küçük eşit
Gt 0x42 Büyüktür
Gte 0x43 Büyük eşit
Eq 0x44 Eşit
Neq 0x45 Eşit değil

Boolean Mantık

Opcode Değer ıklama
And 0x50 Mantıksal VE
Or 0x51 Mantıksal VEYA
Not 0x52 Mantıksal DEĞİL

Kontrol Akışı

Opcode Değer ıklama
Jump 0x60 Koşulsuz atlama
JumpIfFalse 0x61 Register false ise atla

Üyelik Testi

Opcode Değer ıklama
Contains 0x53 Değer listede/string'de var mı kontrolü (in operatörü)

Özel Operasyonlar

Opcode Değer ıklama
Concat 0x80 String birleştirme
MethodCall 0x90 Metod çağrısı
GetProperty 0x91 Nesne özelliği oku (dest, obj_reg, property_name_string)
SetProperty 0x92 Nesne özelliği yaz (obj_reg, property_name_string, val_reg)
Log 0xA0 Değer yazdır (built-in)
CallExternal 0xA1 Harici (host) fonksiyon çağrısı
SetResult 0xB0 İfade sonucunu kaydet (return value için)
End 0xFF Program sonu

Built-in Fonksiyon ID'leri

default_fn modülü, built-in fonksiyonlar için sabit ID'ler tanımlar. CallExternal opcode'u bu ID'leri kullanarak built-in fonksiyonları çağırır.

Sabit ID Fonksiyon
ABS 1 Mutlak değer
MIN 2 Minimum değer
MAX 3 Maksimum değer
FLOOR 4 Aşağı yuvarlama
CEIL 5 Yukarı yuvarlama
ROUND 6 Yuvarlama
SQRT 7 Karekök
LEN 8 Uzunluk
TO_STRING 9 String'e dönüştür
TO_NUMBER 10 Sayıya dönüştür

Hızlı Lookup Tablosu

LOOKUP[256] statik dizisi, O(1) karmaşıklıkta byte-to-opcode dönüşümü sağlar. from_byte(u8) metodu bu tabloyu kullanır.

Metodlar:

  • to_byte() -> u8 — Opcode'u byte'a dönüştür
  • from_byte(u8) -> Option<OpCodeByte> — Byte'ı opcode'a dönüştür (lookup tablosu ile)
  • name() -> &str — İnsan okunabilir opcode adı