Age | Commit message (Collapse) | Author |
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Reports the CPU online percentage given how many cores are online and
how many cores are offline.
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Introduce reporting of the number of halted cores for the scheduler
accounting logic.
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Give each core a bit that indicates whether the core is online or
halted. We also provide a cpu_halt() which marks the core as offline.
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
The NOP (no operation) instruction simply tells the processor to do nothing.
This can be useful for various things such as padding, timing, etc.
--
nop
nop
nop
...
--
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Ensure that after every instruction, we undo any potential side effects
or operations upon the X0 register. The "Registers" section of the
OSMX64 spec states that X0 is a 64-bit, always-zero and readonly
register. All writes to this register are to be ignored by the
processor.
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Implement a hash table used to store a maximum of 128 labels.
This commit adds functions such as label_enter() to add labels
to the table, label_lookup() to lookup labels as well as various
utility functions used internally by the assembler.
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
This commit introduces encoding logic for 4 additional instructions:
- MROB (Mask Register Over [byte])
- MROW (Mask Register Over [word])
- MROD (Mask Register Over [dword])
- MROQ (Mask Register Over [qword])
This instruction is used to fill a register with a specific length of
zeros or ones. For example, to fill a register (e.g., x2) with 16-bits
of 1s:
--
!!
!! Clear bits x2[7:0]... Mrrp,,
!! mrow!!
!!
mrow x2, #1
--
Similarly, an operand of zero sets it to zero. For example, to clear an
entire 64-bit register with zeros. Something like this can be done:
--
mroq x1, #0
--
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
A label is like a pin on a map with a number attached to it. OASM keeps track
of a number referred to as the psuedo instruction pointer (PIP). This value is
initially zero by default and is incremented every instruction. The purpose of
this value is to pin a location in the code and mark it to be at a specific address
so that further references to that label would be translated to the previous PIP value
at the time of encountering the label.
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Introduce comments, example usage:
--
!!
!! Double the X5 register by using the
!! MUL instruction.
!!
mul x5, 2 !! wow
--
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Add support for interpreting the BR (branch) instruction. This
instruction takes in a single register operand containing an address to
reassign the instruction pointer to.
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
The addr_t type represents any kind of memory address. We also assign
paddr_t to addr_t.
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
- [kernel]: Avoid make panic screen configurable [0]
- [kernel]: Avoid using kprintf() during panic [1]
- [kernel]: Add sys/crypto/* [2]
- [kernel/amd64]: Get CPU family and model number [3]
- [kernel/amd64]: Track interrupt count [4]
- [usr: libc]: Add math.h + musl math impl port [5]
- [sys]: Add 64-bit atomic operations in sys/atomic.h [6]
- [kernel: sched]: Sort out MI/MD context switch logic [7]
- [kernel]: Add kernel accounting information [8]
- [usr]: Add 'kstat' program [9]
- [kernel: sched]: Add support for CPU pinning [10]
Commits referenced:
[0]: 85ddd63bddfa20bedce3a387c69dcf66f882a8ea
[1]: a789a2d36560f64952dcfc25d330f1ac04206c14
[2]: 2a93cf52e5386eb1b3586565af6a06ade4d32a66
[3]: 2f1902f6e554f6bc36b5a3e4cf8add8c3e5197cc
[4]: 25d4aca4bf49bdbee6a7a35ef5d63ae45138ddf5
[5]: 30634165980deaeead9f4e71e0ff6a5c9d897776
[6]: a66c3f8d3d1f70beb3147999db21229803eb7021
[7]: f6900b5c3b4832f48359fd761b80f8693a6735e8
[8]: 8a3973e46941b6a8c88a49594364a04ee4b1d84e
[9]: d6bd4640721867f59d89c68fddb15098524c56c8
[10]: 3c9e0969840d47a812f5e65fa43f694f2e7f3ff3
...
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Implement the initial encoding logic for INC/DEC instructions.
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
In order to have more control over the flow at which we grab the next
tokens, we should roll our own loop by hand using TAILQ_FIRST() and
TAILQ_NEXT()
Signed-off-by: Ian Moffett <ian@osmora.org>
|
|
When validating memory addresses coming from userspace, we currently
only check if it is within range of the program stack or data. However,
data may also be allocated in the heap which involves addresses stored
in the memory map ledger. In order for user programs to be able to pass
references to that kind of memory to syscalls, we must be able to check the
addresses against ledger entries as well.
Signed-off-by: Ian Moffett <ian@osmora.org>
|