Commit Graph

130 Commits

Author SHA1 Message Date
Ronald Caesar
07aa3173de engine: move public headers to include folder
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-10 18:30:45 -04:00
Ronald Caesar
fbd61680e3 ir: add instruction emitter function
This function only responsibility is writing opcodes and operands to a
bal_instruction_t and adding it to the instruction stream.

Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-10 17:50:05 -04:00
Ronald Caesar
d663f5faa3 engine: remove poison freed definition
Setting a poison pattern to freed memory isnt a good idea.

Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-10 14:01:13 -04:00
Ronald Caesar
6cd4440436 engine: add destroy() function
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-10 13:57:38 -04:00
Ronald Caesar
6160510de7 engine: add reset() function
Also added the size of each array to bal_engine_t to make finding the
end of the array in memory simple and easy.

Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-10 13:33:42 -04:00
Ronald Caesar
a4dde266f0 engine: api add documentation
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-10 10:17:26 -04:00
Ronald Caesar
46c19425cf engine: add engine init function
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-10 02:58:45 -04:00
Ronald Caesar
bc7803569c engine: add ballistic engine struct
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-09 23:54:02 -04:00
Ronald Caesar
50bdb6ba8d memory: Add memory management interface
I want users of Ballistic to design their own memory allocators. Their memory
allocation requirements will most likely be different from ours, so providing
users the API to write their own allocators gives them a lot of freedom
to do whatever they feel is best. This idea was inspired in part by the Zig
programming language.

Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-09 20:19:44 -04:00
Ronald Caesar
763962567e ir: create initial ballistic types
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-09 19:22:38 -04:00
Ronald Caesar
e9ec38bcfd docs: add template files
These template files come from the Barr C style guide.

Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-09 18:23:35 -04:00
Ronald Caesar
6cf4df24bf docs: add table of contents
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-09 17:26:45 -04:00
Ronald Caesar
74aa9be671 docs: Update outdated instruction operand width
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-09 17:17:13 -04:00
Ronald Caesar
bf146b681a docs: Add initial static assumption implementation
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-08 19:53:52 -04:00
Ronald Caesar
2778c94a15 docs: Split ssa_versions[]
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-08 19:25:26 -04:00
Ronald Caesar
f97fcf7df9 docs: Add scenario to extension instruction
This accidentally got removed in previous commits

Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-08 18:58:01 -04:00
Ronald Caesar
317c33b557 docs: Fix incorrect block limit statement
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-08 18:54:05 -04:00
Ronald Caesar
8b642a1e9f docs: Add limitations to extention instruction
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-08 18:50:52 -04:00
Ronald Caesar
624505af17 docs: Switch instruction and instruction encoding sections
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-08 18:25:05 -04:00
Ronald Caesar
4115204ab9 docs: Shrink instruction_t operands by one
Having 18-bit opcodes means a block has at most 131,072 instructions
which is simply too big. All of these instructions cannot fit into the
L1 cache, which results in cache thrashing.

Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-08 18:18:32 -04:00
Ronald Caesar
e7a8a873e6 docs: Replace ssa_version_t type attribute
We have enough bits in the opcode bitfield in instruction_t
to encode register classes (ADD_INT, ADD_FLOAT, ADD_VECTOR). However,
encoding the bit width (ADD_INT8, ADD_INT32) will massively increase the
amount of opcodes needed. So we replace `type` in ssa_version_t with
`bit_width`.

Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-08 18:09:07 -04:00
Ronald Caesar
fde3d195bd docs: Replace def extensions with block args
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-08 17:52:25 -04:00
Ronald Caesar
e002fbcc6a docs: Add block size limit rule
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-06 18:37:36 -04:00
Ronald Caesar
020aa8dca8 docs: Fix Hot-Cold Splitting contradiction
Rule 4.2 states: "If a basic block is deemed cold, it should move to a
separate buffer." This violates Rule 3.1 Implicit Indexing. If v100 is
located at instructions[100] and we move it to a cold buffer, it id no
longer at index 100. If we keep the index 100 but store the data
elsewhere, you break the linear memory array performance benefits.

Hot-cols splitting will be done during code generation.

Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-06 18:18:53 -04:00
Ronald Caesar
cf805cdd86 docs: Fix incorrect block scope comments
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-05 21:45:43 -04:00
Ronald Caesar
ee594332c9 docs: Refactor IR to merge-at-bottom SSA model
- Replace value-returning IFs with Void IFs and explicit OPCODE_MERGE.
- Move SSA definitions to block exits to eliminate backpatching.
- Formalize Control Scope Stack for tracking yields and arity.
- Update loop peeling logic to respect new merge semantics.

Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-05 21:26:14 -04:00
Ronald Caesar
f314836808 docs: Add IF-to-SELECT optimization pass
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-02 20:04:30 -04:00
Ronald Caesar
826cce03bf docs: Add loop construction algorithm
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-02 02:11:41 -04:00
Ronald Caesar
9c35cfdff1 docs: Add and reorganize ssa construction rules
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-01 23:31:48 -04:00
Ronald Caesar
31db2bd196 docs: Add SSA construction rule for source variables
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-01 22:21:34 -04:00
Ronald Caesar
89c20b9584 docs: Add SSA optimization rules
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-01 22:19:28 -04:00
Ronald Caesar
208592ab3b docs: Add constants to IR design doc
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-01 22:03:20 -04:00
Ronald Caesar
1f593677b2 docs: Add type attribute to ssa_version_t
This attribute originally got removed because you could determine the
type of the variable based on the instruction opcode.

For example:

x1 = OPCODE_ADD_INT32 y1, 10.

x1 type is an int32.

We cannot apply this to control instructions because that would bloat
the amount of opcodes needed. An opcode has 10 bits, so we can define
1024 opcodes. Adding different variations for an `IF` instruction alone
would fill uo way to much space:

x1 = IF_INT8   (condition)
x1 = IF_INT16  (condition)
x1 = IF_INT32  (condition)
x1 = IF_UINT8  (condition)
x1 = IF_FLOAT  (condition)
x1 = IF_VECTOR (condition)
etc...

So to solve creating unecessary opcodes, ssa_version_t will hold the
variable type instead:

x1 = IF (condition) DEF_TYPE: INT32

ssa_version_t.type = DEF_TYPE

Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-01 21:23:30 -04:00
Ronald Caesar
547bb249db docs: Organize IR design doc
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-01 20:22:19 -04:00
Ronald Caesar
4679593839 docs: Move IR dedign doc to docs/
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-01 19:08:40 -04:00
Ronald Caesar
9769ef44d9 docs: Replace outdated proxy instruction examples
Signed-off-by: Ronald Caesar <github43132@proton.me>
2026-01-01 18:32:16 -04:00
Ronald Caesar
703ad41ec6 docs: Design Tiered Architecture
Signed-off-by: Ronald Caesar <github43132@proton.me>
2025-12-31 20:04:42 -04:00
Ronald Caesar
9130e485f3 docs: Add required optimizations
Signed-off-by: Ronald Caesar <github43132@proton.me>
2025-12-31 19:30:25 -04:00
Ronald Caesar
c99a7fd93f doxs: Fix incorrect terminology in instruction docs
Signed-off-by: Ronald Caesar <github43132@proton.me>
2025-12-31 18:27:47 -04:00
Ronald Caesar
5edb36df2a docs: Remove type from ssa_version_t
The variable type will be determine by the opcode, like OPCODE_ADD32.

Signed-off-by: Ronald Caesar <github43132@proton.me>
2025-12-31 18:25:55 -04:00
Ronald Caesar
b424b3e2ee docs: Replace proxy instructions with OPCODE_DEF_EXTENSION
Signed-off-by: Ronald Caesar <github43132@proton.me>
2025-12-31 18:03:59 -04:00
Ronald Caesar
5aa4aca03a docs: Add support for more than three operands
Signed-off-by: Ronald Caesar <github43132@proton.me>
2025-12-29 19:45:04 -04:00
Ronald Caesar
c8c76a52a9 docs: Add constant bit flag to operands
Signed-off-by: Ronald Caesar <github43132@proton.me>
2025-12-29 18:17:23 -04:00
Ronald Caesar
81d0d57418 docs: Remove redundant ssa_version_t struct attribute
instruction[i] defines ssa_versions[i]. So it doesnt make sense to have
the attribite `defining_instruction_index`.

Signed-off-by: Ronald Caesar <github43132@proton.me>
2025-12-29 17:44:12 -04:00
Ronald Caesar
723fb8326e docs: Replace { with OPCODE_END_BLOCK
Signed-off-by: Ronald Caesar <github43132@proton.me>
2025-12-29 08:24:13 -04:00
Ronald Caesar
78c1da03ba docs: Add proof of concept
Demonstrates how the SSSA model will work on a while loop. I plan to add
more examples to iron out the flaws of the model.

Signed-off-by: Ronald Caesar <github43132@proton.me>
2025-12-28 08:58:59 -04:00
Ronald Caesar
76e3c92f35 docs: Make proxy opcode name shorter
Signed-off-by: Ronald Caesar <github43132@proton.me>
2025-12-27 19:16:05 -04:00
Ronald Caesar
b4ee3bf9bf docs: Remove flat ssa model
This model is designed for fast code execution speed which is something
we do not want. We care about compilation speed, so we will focus on
implementing the Structures SSA model.

Signed-off-by: Ronald Caesar <github43132@proton.me>
2025-12-27 18:56:14 -04:00
Ronald Caesar
622d65490a docs: Fix incorrect types in proxy instruction example
Signed-off-by: Ronald Caesar <github43132@proton.me>
2025-12-27 18:52:42 -04:00
Ronald Caesar
f6083444d3 docs: Add proxy instruction design
Signed-off-by: Ronald Caesar <github43132@proton.me>
2025-12-27 18:48:04 -04:00