Releases: kspalaiologos/asmbf
optimizations, effective adresses
This release features:
- Effective adresses:
txt "abcdefghijklmnop"
mov r5, 2
mov r6, 3
rcl r1, 1(r6,r5,4)
out r1
; mov r1, 2(r3, r4, 4) => mov r1, [r4 * 4 + r3 + 2]
ots,
cots-
sto` with reversed parameter order- flag register and effective adress immediates are now accessible.
dsc
- remove the top of the stack- removed bfintd
- added incunabulum
Optimizations, floating point support, additional conditional instructions.
This release features 30 new instructions. Notes:
- Enlargened local permanent generation size.
- Optimized nearly every microcode snippet.
shr, shl, cout, cin
dup, cdup
, additional conditional instructions in form of:c[xor/or/and][eq/lt/gt/ne/ge/le]
.- Error messages!
- Fixed
bfi-derle
bfi
: added decimal flag.- Rave has became temporairly obsolete: will replace it later.
- New
bfmake
, with less bugs and more Perl! bfasm
crashed?generate_report
is here.- around 13 new tests.
- test timeout (20s).
builtin bit operations
This release features the following instructions:
band - bit and
bor - bit or
bxor - bit xor
cflip - flip the conditional execution flag register.
Long instruction aliases
This release features a tool to alias registers and instruction names.
Example:
?bp=r1
?sp=r2
mov bp, sp
List of aliases:
?push=psh
?xchg=swp
?cadd=cad
?csub=csu
?cmul=cmu
?cdiv=cdi
?cmod=cmd
?casl=csl
?casr=csr
?cpow=cpw
?cpush=cps
?cpsh=cps
?cpop=cpo
?cxchg=csw
?cswp=csw
?csrv=crv
?cmov=cmo
?crcl=crc
?csto=cst
Instruction alias example:
push r1
xchg r1, r2
out r2
constpp, rave bugfixes
constpp is a new preprocessor introduced alongside asm2bf.
It can be used to alias instruction and register names, like so:
?r6=sp
; and now
sub sp, 4
; is equal to
sub r6, 4
No spaces are allowed after and before =
, no spaces are allowed inside aliases, no spaces are allowed after the question mark (?
).
Rave has now a 16-bit compatibility option.
Raw left and right bracket fix for Rave (oops)
Now the bitness example has the correct brackets used to create a while loop.
smp
and amp
micropatch
Removed dependency on -lfl
Bugfix release
A purely bugfix-dedicated release. It features optimized modulus, (now working) r5 and r6 due to a programming error introduced while implementing conditional instructions.
Conditional instructions, b2bf!
Now that's a large change!
This update features the following:
- Now, asm2bf has an internal flag register (inaccessible via normal means),
- The flag register can be set by the following:
ceq cne cle clt cge cgt
(equivalent toeq, ne, le, lt, ge, gt
). For instance:
mov r1, 23
ceq r1, 23
; will set the flag register to 1.
ceq r1, 0
; nope, didn't succeed, now clears the flag register.
- New jumps:
cjn cjz
, that depend on the state of the flag register. For example:
; Old way (trashes r3):
mov r3, r1
eq_ r3, 10
jnz r3, %target
; New way (no trashes):
ceq r1, 10
cjn %target
- New instructions! All of these execute, whenever the flag register is set to 1:
Conditional variant: cad csu cmu cdi cmd csl csr cpw cps cpo csw crv cmo crc cst
Classic variant: add sub mul div mod asl asr pow psh pop swp srv mov rcl sto
- b2bf (coined by comrade Maviek) - a B to asm2bf compiler. It's an initial release, so a few things in b2bf may be rigged, but it's able to produce decent code (just three times bigger than the handcoded and optimized assembly equivalent).
Better BFVM, syntax changes.
This release features some syntax changes (i.e. _ is optional at the end of instruction), as well as some changes to BFVM aiming at higher efficiency.
BFVM, new installation method.
v1.3.3 Safer deployment process (#67)
Project cleanup
This release cleans up the root directory, removes useless files, uniformizes the wiki article and overall simplifies the project structure.