Initial project import
This commit is contained in:
commit
23f2d29e32
11957 files changed
+1754577
No files matched your search
@@ -0,0 +1,122 @@
|
||||
// Copyright (c) 2026 Alexander Medvednikov. All rights reserved.
|
||||
// Use of this source code is governed by an MIT license
|
||||
// that can be found in the LICENSE file.
|
||||
|
||||
module ssa
|
||||
|
||||
import v2.token
|
||||
|
||||
pub enum OpCode {
|
||||
// Terminators
|
||||
ret
|
||||
br
|
||||
jmp
|
||||
switch_
|
||||
unreachable
|
||||
|
||||
// Binary (integer)
|
||||
add
|
||||
sub
|
||||
mul
|
||||
sdiv
|
||||
udiv
|
||||
srem
|
||||
urem
|
||||
|
||||
// Binary (float)
|
||||
fadd
|
||||
fsub
|
||||
fmul
|
||||
fdiv
|
||||
frem
|
||||
|
||||
// Bitwise
|
||||
shl
|
||||
lshr
|
||||
ashr
|
||||
and_
|
||||
or_
|
||||
xor
|
||||
|
||||
// Memory
|
||||
alloca
|
||||
heap_alloc // Heap allocate memory for a type (malloc+zero): returns ptr
|
||||
load
|
||||
store
|
||||
get_element_ptr
|
||||
fence
|
||||
cmpxchg
|
||||
atomicrmw
|
||||
|
||||
// Conversion
|
||||
trunc
|
||||
zext
|
||||
sext
|
||||
fptoui
|
||||
fptosi
|
||||
uitofp
|
||||
sitofp
|
||||
bitcast
|
||||
|
||||
// Comparisons (signed)
|
||||
lt
|
||||
gt
|
||||
le
|
||||
ge
|
||||
eq
|
||||
ne
|
||||
// Comparisons (unsigned)
|
||||
ult
|
||||
ugt
|
||||
ule
|
||||
uge
|
||||
|
||||
// Other
|
||||
phi
|
||||
call
|
||||
call_indirect // Indirect call through function pointer
|
||||
call_sret // Call with struct return (x8 indirect return on ARM64)
|
||||
select
|
||||
assign // copy for phi elimination
|
||||
inline_string_init // Create string struct by value: (string){str, len, is_lit}
|
||||
|
||||
// Concurrency
|
||||
go_call // Launch goroutine: go_call fn_ref, args...
|
||||
spawn_call // Launch OS thread: spawn_call fn_ref, args...
|
||||
|
||||
// Aggregate (struct/tuple) operations
|
||||
extractvalue // Extract element from struct/tuple: extractvalue %tuple, index
|
||||
insertvalue // Insert element into struct/tuple: insertvalue %tuple, %val, index
|
||||
struct_init // Create struct: operands are field values in order
|
||||
}
|
||||
|
||||
pub enum AtomicOrdering {
|
||||
not_atomic
|
||||
unordered
|
||||
monotonic
|
||||
acquire
|
||||
release
|
||||
acq_rel
|
||||
seq_cst
|
||||
}
|
||||
|
||||
pub struct Instruction {
|
||||
pub mut:
|
||||
op OpCode
|
||||
// Operands are IDs of other Values
|
||||
operands []ValueID
|
||||
pub:
|
||||
block BlockID
|
||||
typ TypeID // Result type
|
||||
|
||||
pos token.Pos
|
||||
atomic_ord AtomicOrdering
|
||||
inline InlineHint // Inline hint for call instructions
|
||||
}
|
||||
|
||||
pub enum InlineHint {
|
||||
none // No hint, let optimizer decide
|
||||
always // Always inline (e.g., V's [inline] attribute)
|
||||
never // Never inline (e.g., V's [noinline] attribute)
|
||||
hint // Suggest inlining (optimizer may ignore)
|
||||
}
|
||||
Reference in new issue
Block a user