about summary refs log tree commit diff stats
path: root/mu_summary
Commit message (Collapse)AuthorAgeFilesLines
* 6160 - plan for safe heap accessKartik Agaram2020-03-211-0/+24
| | | | | | | | | Based on apps/handle.subx (commit 4894), but we're able to simplify it further now that we know more about the situation we find ourselves in. 6 instructions, zero pushes or pops. Before I can start building this, I need to reorganize my use of handles. They're going to be fat pointers so we can't store them in registers anymore.
* 6145 - 'address' operatorKartik Agaram2020-03-141-2/+6
| | | | | This could be a can of worms, but I think I have a set of checks that will keep use of addresses type-safe.
* 6131 - operating on arrays on the stackKartik Agaram2020-03-121-0/+2
|
* 6129Kartik Agaram2020-03-111-1/+2
|
* 6097Kartik Agaram2020-03-071-2/+1
| | | | | | I thought I needed to support compute-offset with literal index, but in that case might as well just use an index literal directly. The 'index' instruction with literals already supports non-power-of-2 sizes.
* 6094 - new 'compute-offset' instructionKartik Agaram2020-03-071-3/+8
| | | | | | | | | | | | | | | | | | | | | | | If indexing into a type with power-of-2-sized elements we can access them in one instruction: x/reg1: (addr int) <- index A/reg2: (addr array int), idx/reg3: int This translates to a single instruction because x86 instructions support an addressing mode with left-shifts. For non-powers-of-2, however, we need a multiply. To keep things type-safe, it is performed like this: x/reg1: (offset T) <- compute-offset A: (addr array T), idx: int y/reg2: (addr T) <- index A, x An offset is just an int that is guaranteed to be a multiple of size-of(T). Offsets can only be used in index instructions, and the types will eventually be required to line up. In the process, I have to expand Input-size because mu.subx is growing big.
* 6059Kartik Agaram2020-02-271-0/+5
|
* 6041 - array indexing starting to workKartik Agaram2020-02-211-0/+6
| | | | | | | | | | | | | And we're using it now in factorial.mu! In the process I had to fix a couple of bugs in pointer dereferencing. There are still some limitations: a) Indexing by a literal doesn't work yet. b) Only arrays of ints supported so far. Looking ahead, I'm not sure how I can support indexing arrays by non-literals (variables in registers) unless the element size is a power of 2.
* 6039Kartik Agaram2020-02-211-0/+4
|
* 6019 - finish supporting all branch primitivesKartik Agaram2020-02-181-2/+3
| | | | | | | | I'd been thinking I didn't need unconditional `break` instructions, but I just realized that non-local unconditional breaks have a use. Stop over-thinking this, just support everything. The code is quite duplicated.
* 5969Kartik Agaram2020-02-011-27/+26
|
* 5968Kartik Agaram2020-02-011-0/+192