MACROGROK / examples /infer4.asm
SNAPKITTYWEST's picture
push from SNAPKITTYWEST/MACROGROK
b86c469 verified
Raw
History Blame Contribute Delete
2.67 kB
; MACROGROK — INFER4 (4-input fixed-point binary decision)
; AGC-inspired pseudo-ISA. Not authentic yaYUL. 15 data bits + parity.
; See README.md for Q formats and memory map.
; ===== FIXED / ROM =====
WEIGHTS_Q1_14: DC 2458, -1638, 819, 3277 ; Q1.14
BIAS_Q3_12: DC -256 ; Q3.12
ALPHA_Q1_14: DC 12288 ; 0.75 Q1.14
ONE_Q1_14: DC 16384
OUT_MIN_Q1_14: DC -16384
OUT_MAX_Q1_14: DC 16383
SCORE_MIN_Q3_12: DC -8192
SCORE_MAX_Q3_12: DC 8191
; ===== ERASABLE / RAM =====
INPUT: DS 4
STATE: DS 1
OUTPUT: DS 1
ACC_HI: DS 1
ACC_LO: DS 1
PROD_HI: DS 1
PROD_LO: DS 1
TMP0: DS 1
TMP1: DS 1
FLAGS: DS 1
FLAG_VALID EQU 0001
FLAG_SAT EQU 0002
FLAG_POSITIVE EQU 0004
; ===== PRIMITIVE MACROS =====
; LOAD/STORE/ADD/SUB/MUL16/ADD32/ASR32/CMP/BR* assumed.
MACRO CLR_ACC
CLR ACC_HI
CLR ACC_LO
ENDM
MACRO MAC_Q1_14 a, b
LOAD R0, a
LOAD R1, b
MUL16 R0, R1 ; PROD_HI:PROD_LO
LOAD R2, PROD_HI
LOAD R3, PROD_LO
ASR32 R2:R3, 4
ADD32 ACC_HI:ACC_LO, R2:R3
ENDM
MACRO ACC_TO_Q3_12 dest
ASR32 ACC_HI:ACC_LO, 12
STORE dest, ACC_LO
ENDM
MACRO SAT_Q3_12 value, lo, hi
LOAD R0, value
LOAD R1, lo
CMP R0, R1
BRLT %%LOW
LOAD R1, hi
CMP R0, R1
BRGT %%HIGH
BR %%DONE
%%LOW:
LOAD R0, lo
STORE value, R0
LOAD R1, FLAGS
OR R1, FLAG_SAT
STORE FLAGS, R1
BR %%DONE
%%HIGH:
LOAD R0, hi
STORE value, R0
LOAD R1, FLAGS
OR R1, FLAG_SAT
STORE FLAGS, R1
%%DONE:
ENDM
MACRO DOT4_Q1_14
CLR_ACC
MAC_Q1_14 INPUT+0, WEIGHTS_Q1_14+0
MAC_Q1_14 INPUT+1, WEIGHTS_Q1_14+1
MAC_Q1_14 INPUT+2, WEIGHTS_Q1_14+2
MAC_Q1_14 INPUT+3, WEIGHTS_Q1_14+3
ENDM
MACRO THRESHOLD_Q3_12
LOAD R0, TMP0
CLR R1
CMP R0, R1
BRLT %%NEG
LOAD R0, ONE_Q1_14
STORE TMP1, R0
LOAD R0, FLAGS
OR R0, FLAG_POSITIVE
STORE FLAGS, R0
BR %%DONE
%%NEG:
LOAD R0, OUT_MIN_Q1_14
STORE TMP1, R0
%%DONE:
ENDM
MACRO UPDATE_STATE_3_4
LOAD R0, STATE
ADD R1, R0
ADD R1, R0
ADD R1, R0 ; R1=3*STATE
LOAD R2, TMP1
ADD R1, R2 ; 3*STATE+TARGET
ASR R1, 2 ; /4
STORE STATE, R1
ENDM
; ===== MAIN =====
INFER4:
CLR FLAGS
DOT4_Q1_14
ACC_TO_Q3_12 TMP0
LOAD R0, TMP0
LOAD R1, BIAS_Q3_12
ADD R0, R1
STORE TMP0, R0
SAT_Q3_12 TMP0, SCORE_MIN_Q3_12, SCORE_MAX_Q3_12
THRESHOLD_Q3_12
UPDATE_STATE_3_4
LOAD R0, STATE
STORE OUTPUT, R0
LOAD R0, FLAGS
OR R0, FLAG_VALID
STORE FLAGS, R0
RET