Added bl and blx instructions
All checks were successful
Central(Architecture) Docs Build / Build Documentation (push) Successful in 20s
All checks were successful
Central(Architecture) Docs Build / Build Documentation (push) Successful in 20s
This commit is contained in:
parent
98ec2dd0f4
commit
8d188df8d1
@ -46,6 +46,10 @@ include::instructions/movn.adoc[]
|
|||||||
include::instructions/b.adoc[]
|
include::instructions/b.adoc[]
|
||||||
<<<
|
<<<
|
||||||
include::instructions/bx.adoc[]
|
include::instructions/bx.adoc[]
|
||||||
|
<<<
|
||||||
|
include::instructions/bl.adoc[]
|
||||||
|
<<<
|
||||||
|
include::instructions/blx.adoc[]
|
||||||
|
|
||||||
<<<
|
<<<
|
||||||
==== Subsystems Instructions
|
==== Subsystems Instructions
|
||||||
|
103
src/execution-engine-spec/instructions/bl.adoc
Normal file
103
src/execution-engine-spec/instructions/bl.adoc
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
===== BL: Branch with Link
|
||||||
|
[wavedrom, ,svg]
|
||||||
|
....
|
||||||
|
{reg: [
|
||||||
|
{bits: 7, name: 0x14, type: 8, attr: '0x14'},
|
||||||
|
{bits: 4, name: 'cond', type: 6},
|
||||||
|
{bits: 21, name: 'off', type: 5}
|
||||||
|
], config: {label: {right: 'BLIO'}}}
|
||||||
|
....
|
||||||
|
|
||||||
|
[wavedrom, ,svg]
|
||||||
|
....
|
||||||
|
{reg: [
|
||||||
|
{bits: 7, name: 0x15, type: 8, attr: '0x15'},
|
||||||
|
{bits: 1, name: 0},
|
||||||
|
{bits: 24, name: 'off', type: 5}
|
||||||
|
], config: {label: {right: 'BLAIO'}}}
|
||||||
|
....
|
||||||
|
|
||||||
|
[frame=ends,grid=rows,cols="1,1"]
|
||||||
|
|===
|
||||||
|
|Instruction variant | Description
|
||||||
|
|
||||||
|
|BLIO
|
||||||
|
|<<BLIO>>
|
||||||
|
|
||||||
|
|BLAIO
|
||||||
|
|<<BLAIO>>
|
||||||
|
|===
|
||||||
|
|
||||||
|
<<<
|
||||||
|
[id=BLIO]
|
||||||
|
====== BLIO: Branch with Link Immediate Offset
|
||||||
|
Description::
|
||||||
|
Stores the value of `pc + 4` into *lr* then branch to the instruction the address of which is at `pc + off`. +
|
||||||
|
The assembler selects this variant over *BLAIO* when a condition other than `al` is given.
|
||||||
|
Encoding:: D1-Type
|
||||||
|
Assembler syntax::
|
||||||
|
+
|
||||||
|
[source]
|
||||||
|
----
|
||||||
|
bl<cond> <off>
|
||||||
|
----
|
||||||
|
+
|
||||||
|
Where:
|
||||||
|
[horizontal]
|
||||||
|
cond::: Condition.
|
||||||
|
off:::
|
||||||
|
Signed immediate offset.
|
||||||
|
Must be a multiple of 4 and in the range -4194304..4194300.
|
||||||
|
|
||||||
|
Examples::
|
||||||
|
+
|
||||||
|
[source]
|
||||||
|
----
|
||||||
|
bl.ne -20 <1>
|
||||||
|
bl.eq 8 <2>
|
||||||
|
----
|
||||||
|
<1> If the last comparison resulted in an 'ne' condition status, branches to `pc - 20` after storing `pc + 4` into *lr*. Else, does nothing.
|
||||||
|
<2> If the last comparison resulted in an 'eq' condition status, branches to `pc + 8` after storing `pc + 4` into *lr*. Else, does nothing.
|
||||||
|
|
||||||
|
Privileged instruction:: No.
|
||||||
|
Updates program state flags:: No.
|
||||||
|
Exceptions::
|
||||||
|
MemFault.
|
||||||
|
|
||||||
|
<<<
|
||||||
|
[id=BLAIO]
|
||||||
|
====== BLAIO: Branch with Link Always Immediate Offset
|
||||||
|
Description::
|
||||||
|
Stores the value of `pc + 4` into *lr* then branch to the instruction the address of which is at `pc + off`.
|
||||||
|
Permits the use of more bits for the offset at the cost of being unconditional. +
|
||||||
|
The assembler selects this variant over *BLIO* when no condition is given (or when `al` is given).
|
||||||
|
Encoding:: D2-Type
|
||||||
|
Assembler syntax::
|
||||||
|
+
|
||||||
|
[source]
|
||||||
|
----
|
||||||
|
bl<cond>? <off>
|
||||||
|
----
|
||||||
|
+
|
||||||
|
Where:
|
||||||
|
[horizontal]
|
||||||
|
cond::: Optional condition (if specified, can only be `al`).
|
||||||
|
off:::
|
||||||
|
Signed immediate offset.
|
||||||
|
Must be in the range -8388611..8388607.
|
||||||
|
|
||||||
|
Examples::
|
||||||
|
+
|
||||||
|
[source]
|
||||||
|
----
|
||||||
|
bl -0x3FFFFF <1>
|
||||||
|
bl.al 0x3FFFFF <2>
|
||||||
|
----
|
||||||
|
<1> Branches to `pc - 0x3FFFFF` after storing `pc + 4` into *lr*.
|
||||||
|
<2> Branches to `pc + 0x3FFFFF` after storing `pc + 4` into *lr*.
|
||||||
|
|
||||||
|
Privileged instruction:: No.
|
||||||
|
Updates program state flags:: No.
|
||||||
|
Exceptions::
|
||||||
|
MemFault.
|
||||||
|
|
108
src/execution-engine-spec/instructions/blx.adoc
Normal file
108
src/execution-engine-spec/instructions/blx.adoc
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
===== BLX: Branch with Link Extended
|
||||||
|
[wavedrom, ,svg]
|
||||||
|
....
|
||||||
|
{reg: [
|
||||||
|
{bits: 7, name: 0x16, type: 8, attr: '0x16'},
|
||||||
|
{bits: 4, name: 'cond', type: 6},
|
||||||
|
{bits: 5, name: 'off[4:0]', type: 5},
|
||||||
|
{bits: 5, name: 'base', type: 4},
|
||||||
|
{bits: 11, name: 'off[15:5]', type: 5}
|
||||||
|
], config: {label: {right: 'BLXI'}}}
|
||||||
|
....
|
||||||
|
|
||||||
|
[wavedrom, ,svg]
|
||||||
|
....
|
||||||
|
{reg: [
|
||||||
|
{bits: 7, name: 0x17, type: 8, attr: '0x17'},
|
||||||
|
{bits: 4, name: 'cond', type: 6},
|
||||||
|
{bits: 5, name: 'unused'},
|
||||||
|
{bits: 5, name: 'base', type: 4},
|
||||||
|
{bits: 5, name: 'off', type: 4},
|
||||||
|
{bits: 6, name: 'unused'}
|
||||||
|
], config: {label: {right: 'BLXR'}}}
|
||||||
|
....
|
||||||
|
|
||||||
|
[frame=ends,grid=rows,cols="1,1"]
|
||||||
|
|===
|
||||||
|
|Instruction variant | Description
|
||||||
|
|
||||||
|
|BLXI
|
||||||
|
|<<BLXI>>
|
||||||
|
|
||||||
|
|BLXR
|
||||||
|
|<<BLXR>>
|
||||||
|
|===
|
||||||
|
|
||||||
|
<<<
|
||||||
|
[id=BLXI]
|
||||||
|
====== BLXI: Branch with Link Extended Immediate
|
||||||
|
Description::
|
||||||
|
Stores the value of `pc + 4` into *lr* then branch to the instruction the address of which is at `base + off`.
|
||||||
|
Permits to use a varying base address with a fixed offset.
|
||||||
|
Encoding:: B2-Type
|
||||||
|
Assembler syntax::
|
||||||
|
+
|
||||||
|
[source]
|
||||||
|
----
|
||||||
|
blx<cond?> [<base>, <off?>]
|
||||||
|
----
|
||||||
|
+
|
||||||
|
Where:
|
||||||
|
[horizontal]
|
||||||
|
cond::: Optional condition.
|
||||||
|
base::: Base register.
|
||||||
|
off:::
|
||||||
|
Optional signed offset immediate.
|
||||||
|
Must be a multiple of 4 and in the range -131072..131068.
|
||||||
|
If omitted, then 0 is used.
|
||||||
|
|
||||||
|
Examples::
|
||||||
|
+
|
||||||
|
[source]
|
||||||
|
----
|
||||||
|
blx [r0, 12] <1>
|
||||||
|
blx.eq [r3] <2>
|
||||||
|
----
|
||||||
|
<1> Branches to the instruction at address `r0 + 12` after storing `pc + 4` into *lr*.
|
||||||
|
<2> If the last comparison resulted in an 'eq' condition status, branches to the instruction at the address in r3 after storing `pc + 4` into *lr*. Else, does nothing.
|
||||||
|
|
||||||
|
Privileged instruction:: No.
|
||||||
|
Updates program state flags:: No.
|
||||||
|
Exceptions::
|
||||||
|
MemFault.
|
||||||
|
|
||||||
|
<<<
|
||||||
|
[id=BLXR]
|
||||||
|
====== BLXR: Branch with Link Extended Register
|
||||||
|
Description::
|
||||||
|
Stores the value of `pc + 4` into *lr* then branch to the instruction the address of which is at `base + off`.
|
||||||
|
Permits to use a varying base address with a varying offset.
|
||||||
|
Encoding:: A2-Type
|
||||||
|
Assembler syntax::
|
||||||
|
+
|
||||||
|
[source]
|
||||||
|
----
|
||||||
|
blx<cond?> [<base>, <off>]
|
||||||
|
----
|
||||||
|
+
|
||||||
|
Where:
|
||||||
|
[horizontal]
|
||||||
|
cond::: Optional condition.
|
||||||
|
base::: Base register.
|
||||||
|
off::: Offset register.
|
||||||
|
|
||||||
|
Examples::
|
||||||
|
+
|
||||||
|
[source]
|
||||||
|
----
|
||||||
|
blx [r0, r1] <1>
|
||||||
|
blx.eq [r2, r3] <2>
|
||||||
|
----
|
||||||
|
<1> Branches to the instruction at address `r0 + r1` after storing `pc + 4` into *lr*.
|
||||||
|
<2> If the last comparison resulted in an 'eq' condition status, branches to the instruction at address `r2 + r3` after storing `pc + 4` into *lr*. Else, does nothing.
|
||||||
|
|
||||||
|
Privileged instruction:: No.
|
||||||
|
Updates program state flags:: No.
|
||||||
|
Exceptions::
|
||||||
|
MemFault.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user