📄 recip8.asm
字号:
; Inverse routine calculates 1/x where x is a vector of block-floating-
; point Q.7 numbers. Values are returned in place.
; USAGE:
; void inv(Q7 *x, int *exp, int N)
; INPUTS:
; x - Array of Q.7 numbers with associated exponent *exp
; exp - Exponent used to interpret final results i.e. x[i]=x[i]*2^exp
; N - Number of elements in array x to compute inverse of
; OUTPUTS:
; x - Inverted array stored on top of old values.
; exp - New exponent stored on top of old exponent.
; NOTE: Assumes SXM=1
.include "ccall.asm"
.def _ti_recip8
_ti_recip8:
pre_ccall 5,AR_X,AR_XEXP,AR_Z,AR_ZEXP,AR_N
clrc SXM
; *ZEXP = -*XEXP + 7
sar AR_XEXP,*
lacl *,AR_ZEXP
neg
add #7
sacl *,AR_STACK
; Local variables
; N%8 - stack[0]
; N/8 - stack[1]
; Compute N%7 to make N divisible by 8 in the unrolled loop
sar AR_N,* ; stack[0]=N
lacl *+ ; acc=N
and #07h ; acc&=0111b - Unroll 8 iterations
sacl *- ; stack[1] = N % 0111b
lacc *,13 ; acch=N>>3
sach *+ ; stack[0]=N>>3
lar AR_N,*+,AR_N ; AR_Y = stack[1] = N%7
banz NEXT0,AR_X ; Skip loop if AR_X = 0
b NEXT1
NEXT0:
; Let acc=x[i]>>8 so we can use a lookup table
lacc *+,8,AR_STACK
sach *
lacl *,AR_Z
add #INVTABLE
; data[AR_X++] = invtable[ACC]
tblr *+,AR_N
; while(AR_N--)
banz NEXT0,AR_X
NEXT1:
mar *,AR_STACK
sbrk #2
lar AR_N,*,AR_N ; AR_Y = stack[0]=N>>3
banz NEXT2,AR_X ; Go to 8x loop if AR_X > 0
b DONE
NEXT2:
; z[AR_Z++]=x[AR_X++]*y[AR_Y++]
.loop 7
; Let acc=x[i]>>8 so we can use a lookup table
lacc *+,8,AR_STACK
sach *
lacl *,AR_Z
add #INVTABLE
; data[AR_X++] = invtable[ACC]
tblr *+,AR_X
; while(AR_N--)
.endloop
; Let acc=x[i]>>8 so we can use a lookup table
lacc *+,8,AR_STACK
sach *
lacl *,AR_Z
add #INVTABLE
; data[AR_X++] = invtable[ACC]
tblr *+,AR_N
; while(AR_N--)
banz NEXT2,AR_X
DONE:
post_ccall 5
INVTABLE:
.word 32767
.word 32767
.word 16383
.word 10922
.word 8191
.word 6553
.word 5461
.word 4681
.word 4095
.word 3640
.word 3276
.word 2978
.word 2730
.word 2520
.word 2340
.word 2184
.word 2047
.word 1927
.word 1820
.word 1724
.word 1638
.word 1560
.word 1489
.word 1424
.word 1365
.word 1310
.word 1260
.word 1213
.word 1170
.word 1129
.word 1092
.word 1057
.word 1023
.word 992
.word 963
.word 936
.word 910
.word 885
.word 862
.word 840
.word 819
.word 799
.word 780
.word 762
.word 744
.word 728
.word 712
.word 697
.word 682
.word 668
.word 655
.word 642
.word 630
.word 618
.word 606
.word 595
.word 585
.word 574
.word 564
.word 555
.word 546
.word 537
.word 528
.word 520
.word 511
.word 504
.word 496
.word 489
.word 481
.word 474
.word 468
.word 461
.word 455
.word 448
.word 442
.word 436
.word 431
.word 425
.word 420
.word 414
.word 409
.word 404
.word 399
.word 394
.word 390
.word 385
.word 381
.word 376
.word 372
.word 368
.word 364
.word 360
.word 356
.word 352
.word 348
.word 344
.word 341
.word 337
.word 334
.word 330
.word 327
.word 324
.word 321
.word 318
.word 315
.word 312
.word 309
.word 306
.word 303
.word 300
.word 297
.word 295
.word 292
.word 289
.word 287
.word 284
.word 282
.word 280
.word 277
.word 275
.word 273
.word 270
.word 268
.word 266
.word 264
.word 262
.word 260
.word 258
.word -256
.word -259
.word -261
.word -263
.word -265
.word -267
.word -269
.word -271
.word -274
.word -276
.word -278
.word -281
.word -283
.word -285
.word -288
.word -290
.word -293
.word -296
.word -298
.word -301
.word -304
.word -307
.word -310
.word -313
.word -316
.word -319
.word -322
.word -325
.word -328
.word -331
.word -335
.word -338
.word -342
.word -345
.word -349
.word -353
.word -357
.word -361
.word -365
.word -369
.word -373
.word -377
.word -382
.word -386
.word -391
.word -395
.word -400
.word -405
.word -410
.word -415
.word -421
.word -426
.word -432
.word -437
.word -443
.word -449
.word -456
.word -462
.word -469
.word -475
.word -482
.word -490
.word -497
.word -505
.word -512
.word -521
.word -529
.word -538
.word -547
.word -556
.word -565
.word -575
.word -586
.word -596
.word -607
.word -619
.word -631
.word -643
.word -656
.word -669
.word -683
.word -698
.word -713
.word -729
.word -745
.word -763
.word -781
.word -800
.word -820
.word -841
.word -863
.word -886
.word -911
.word -937
.word -964
.word -993
.word -1024
.word -1058
.word -1093
.word -1130
.word -1171
.word -1214
.word -1261
.word -1311
.word -1366
.word -1425
.word -1490
.word -1561
.word -1639
.word -1725
.word -1821
.word -1928
.word -2048
.word -2185
.word -2341
.word -2521
.word -2731
.word -2979
.word -3277
.word -3641
.word -4096
.word -4682
.word -5462
.word -6554
.word -8192
.word -10923
.word -16384
.word -32768
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -