Fixed Point Routines
Fixed Point Routines
∑ a( k) ⋅ 2 ∑ a ( k ) ⋅ 2,
kÐr Ðr k
This application note presents an implementation of the A = = 2
following fixed point math routines for the PICmicro k=0 k=0
microcontroller families:
• Multiplication
where n is the number of bits, a(k) is the kth bit with
• Division
a(0) = LSb, and r indicates the location of the radix
Routines for the PICmicro microcontroller families are point. For example, in the case where A is an integer,
provided in a variety of fixed point formats, including r = 0 and when A is a fraction less than one, r = n. The
both unsigned and signed two’s complement arith- value of r only affects the interpretation of the numbers
metic. in a fixed point calculation, with the actual binary
representation of the numbers independent of the
value of r. Factoring out of the above sum, it simply
locates the radix point of the representation and is
analogous to an exponent in a floating point system.
Using the notation Qi.j to denote a fixed point binary
number with i bits to the left of the radix point and j to
the right, the above n-bit format is in Qn-r.r. With care,
fixed point calculations can be performed on operands
in different Q formats. Although the radix point must be
aligned for addition or subtraction, multiplication
provides an illustrative example of the simple
interpretive nature of r. Consider the unsigned product
of a Q20.4 number with a Q8.8. After calling the
appropriate unsigned 24x16 bit multiply for these fixed
point arguments, the 40-bit fixed point result is in
Q28.12, where the arguments of the Q notation are
summed respectively.
Similar arguments can be made for two’s complement
arithmetic, where the negative representation of a pos-
itive number is obtained by reversing the value of each
bit and incrementing the result by one. Producing a
unique representation of zero, and covering the range
-2n-1 to 2n-1 - 1, this is more easily applied in addition
and subtraction operations and is therefore the most
commonly used method of representing positive and
negative numbers in fixed point arithmetic.
The above analysis in Q notation can be employed to
build dedicated fixed point algorithms, leading to
improved performance over floating point methods in
cases where the size of the arguments required for the
range and precision of the calculations is not large
enough to destroy gains made by fixed point methods.
PIC16C5X/PIC16CXXX Routines
FXD0808S, FXD0808U, FXD0807U, 8/8 FXM0808S, FXM0808U, FXM0807U 8x8
FXD0707U
FXD1608S, FXD1608U, FXD1607U, 16/8 FXM1608S, FXM1608U, 16x8
FXD1507U FXM1607U, FXM1507U
FXD1616S, FXD1616U, FXD1515U 16/16 FXM1616S, FXM1616U, FXM1515U 16x16
FXD2416S, FXD2416U, FXD2315U 24/16 FXM2416S, FXM2416U, FXM2315U 24x16
FXD2424S, FXD2424U, FXD2323U 24/24 FXM2424S, FXM2424U, FXM2323U 24x24
FXD3216S, FXD3216U, FXD3115U 32/16 FXM3216S, FXM3216U, FXM3115U 32x16
FXD3224S, FXD3224U, FXD3123U 32/24 FXM3224S, FXM3224U, FXM3123U 32x24
FXD3232S, FXD3232U, FXD3131U 32/32 FXM3232S, FXM3232U, FXM3131U 32x32
PIC17CXXX Functions
FXD0808S, FXD0808U, FXD0807U, 8/8 FXM0808S, FXM0808U 8x8
FXD0707U
FXD1608S, FXD1608U, FXD1607U, 16/8 FXM1608S, FXM1608U 16x8
FXD1507U
FXD1616S, FXD1616U, FXD1615U, 16/16 FXM1616S, FXM1616U 16x16
FXD1515U
FXD2416S, FXD2416U, FXD2415U, 24/16 FXM2416S, FXM2416U 24x16
FXD2315U
FXD2424S, FXD2424U, FXD2423U, 24/24 FXM2424S, FXM2424U 24x24
FXD2323U
FXD3216S, FXD3216U, FXD3215U, 32/16 FXM3216S, FXM3216U 32x16
FXD3115U
FXD3224S, FXD3224U, FXD3223U, 32/24 FXM3224S, FXM3224U 32x24
FXD3123U
FXD3232S, FXD3232U, FXD3231U, 32/32 FXM3232S, FXM3232U 32x32
FXD3131U
Note: U - unsigned math operation, S - signed math operation
(BARGB0⋅28+BARGB1⋅20) = FXM1616U(0x0458,0x822C)
AARGB0⋅BARGB0⋅224 + = FXM1616U(1112,33324)
(AARGB0⋅BARGB1+AARGB1⋅BARGB0)⋅216 + = 0x02356F20
(AARGB1⋅BARGB1+AARGB2⋅BARGB0)⋅28 + = 37056288
AARGB2⋅BARGB1⋅20
This is completely analogous to arithmetic in base
28 = 256, where the respective digit products must be
aligned according to their orders of magnitude before
summation. It is important to note that no carryout
beyond the sum of the lengths of the arguments can
occur[1]. This fact is helpful in constructing algorithms
for cases with a large number of terms. For example,
the 32x16 case containing 8 individual 8x8 terms, can
be viewed as a 24x16 product between the 3 least sig-
nificant bytes of AARG with BARG, producing no carry-
out, followed by augmentation with the remaining two
terms. This philosophy has been applied in optimizing
the unsigned algorithms, using the shorter products as
building blocks for the larger ones.
Routine Max Cycles Min Cycles Average Cycles Program Memory Data Memory
FXM0808S 14 14 14 10 3
FXM0808U 9 9 9 5 3
FXM1608S 24 21 23 20 4
FXM1608U 15 15 15 11 4
FXM1616S 42 34 38 38 8
FXM1616U 29 29 29 25 7
FXM2416S 59 49 54 55 10
FXM2416U 43 43 43 39 8
FXM2424S 84 72 78 80 12
FXM2424U 68 68 68 64 12
FXM3216S 76 64 70 72 12
FXM3216U 57 57 57 53 9
FXM3224S 111 97 104 107 15
FXM3224U 93 93 93 89 15
FXM3232S 148 132 140 144 18
FXM3232U 128 128 128 124 18
Routine Max Cycles Min Cycles Average Cycles Program Memory Data Memory
FXM0808S 91 9 85 33 5
FXM0808U 76 57 74 21 4
FXM0707U 70 51 67 23 4
FXM1608S 110 11 85 44 7
FXM1608U 129 61 105 31 7
FXM1507U 86 27 64 35 7
FXM1616S 284 11 235 74 9
FXM1616U 259 110 214 58 9
FXM1515U 247 105 205 63 9
FXM2416S 353 132 281 92 12
FXM2416U 328 113 260 70 12
FXM2315U 321 108 248 76 12
FXM2424S 533 241 432 126 13
FXM2424U 497 258 401 98 13
FXM2323U 481 230 390 107 13
FXM3216S 440 48 327 98 9
FXM3216U 415 116 304 84 9
FXM3115U 395 111 291 91 9
FXM3224S 656 253 502 152 15
FXM3224U 620 201 470 151 15
FXM3123U 587 255 457 129 15
FXM3232S 841 411 686 189 17
FXM3232U 794 443 645 168 17
FXM3131U 787 392 631 168 17
Routine Max Cycles Min Cycles Average Cycles Program Memory Data Memory
FXD0808S 91 85 89 77 4
FXD0808U 78 74 77 74 3
FXD0807U 69 69 69 65 3
FXD0707U 64 64 64 60 3
FXD1608S 162 44 156 146 5
FXD1608U 196 170 183 195 4
FXD1607U 133 133 133 129 4
FXD1507U 128 128 128 124 4
FXD1616S 219 200 211 241 7
FXD1616U 247 227 244 243 6
FXD1615U 188 182 184 216 6
FXD1515U 182 177 179 218 6
FXD2416S 315 291 305 353 8
FXD2416U 352 342 347 453 8
FXD2415U 283 272 277 339 8
FXD2315U 275 266 270 330 8
FXD2424S 387 361 377 482 10
FXD2424U 422 415 419 577 10
FXD2423U 352 344 347 460 9
FXD2323U 344 337 341 448 9
FXD3216S 415 382 400 476 9
FXD3216U 468 459 463 608 9
FXD3215U 375 363 369 451 8
FXD3115U 368 357 362 442 8
FXD3224S 514 477 496 639 11
FXD3224U 566 553 560 769 11
FXD3223U 476 459 465 612 10
FXD3123U 466 451 457 600 10
FXD3232S 610 572 593 800 13
FXD3232U 665 650 655 930 13
FXD3231U 567 555 560 773 12
FXD3131U 558 547 552 758 12
Routine Max Cycles Min Cycles Average Cycles Program Memory Data Memory
FXD0808S 131 36 109 41 5
FXD0808U 103 95 102 15 4
FXD0807U 91 91 91 21 4
FXD0707U 83 83 83 44 4
FXD1608S 181 49 159 67 6
FXD1608U 297 237 269 41 7
FXD1607U 177 177 177 41 5
FXD1507U 169 169 169 44 5
FXD1616S 334 302 315 74 8
FXD1616U 376 316 371 27 7
FXD1515U 292 277 280 45 7
FXD2416S 447 408 427 140 8
FXD2416U 524 504 510 172 8
FXD2315U 402 382 388 120 7
FXD2424S 570 528 549 253 12
FXD2424U 641 624 630 226 13
FXD2323U 520 502 508 211 12
FXD3216S 584 67 561 201 10
FXD3216U 694 671 680 243 9
FXD3115U 534 509 518 160 9
FXD3224S 747 695 722 280 11
FXD3224U 853 830 838 299 11
FXD3123U 692 668 676 232 10
FXD3232S 909 855 885 357 13
FXD3232U 1012 990 998 364 13
FXD3131U 851 828 836 304 13
REFERENCES
1. Cavanagh, J.J.F., “Digital Computer Arithmetic,” McGraw-Hill,1984.
2. Hwang, K., “Computer Arithmetic,” John Wiley & Sons, 1979.
3. Scott, N.R., “Computer Number Systems & Arithmetic,” Prentice Hall, 1985.
4. Knuth, D.E., “The Art of Computer Programming, Volume 2,” Addison-Wesley, 1981.
5. F.J.Testa, “IEEE 754 Compliant Floating Point Routines,” AN575, Embedded Control Handbook, Microchip Tech-
nology Inc., 1995.
∑ d( k) ⋅ 2
Ðk
F =
A.1 Integer conversion algorithm[3]:
k=1
Given an integer I, where d(k) are the bit values of its
n- bit binary representation with d(0) = LSB, k=0
nÐ1 F(k) = F
∑ d( k) ⋅ 2
k while k <= n
I =
k=0 d(k) = F(k)⋅ 2
F(k+1) = fractional part of F(k) ⋅ 2
k=0
k = k + 1
I(k) = I
endw
while I(k) = ! 0
d(k) = remainder of I(k)/2
I(k+1) = I(k)/2
k = k + 1
endw
where denotes the greatest integer function (or
ceiling function).
FXMxxU FXMxxS
i=0 i=0
clear high order clear high order
partial product partial product
Yes
Yes multiplier < 0?
multiplier
bit i = 1?
No
No negate multiplier
and multiplicand
add multiplicand save sign of result
to high order
partial product
Yes
multiplier
right shift bit i = 1?
partial product
i=i+1
No
add multiplicand
to high order
partial product
Yes
i < n?
Return
and indicate
no error
Yes
i < n - 1?
No
Return
and indicate
no error
FXMxxU FXMxxS
Return Yes
AARG < 0?
and indicate
no error
No
subtract BARG
from most
significant bytes of
product
Yes
BARG < 0?
No
subtract AARG
from most
significant bytes of
product
Return
and indicate
no error
FXDxxU FXDxxS A
left shift
i=0 compute sign (remainder,
clear remainder of quotient quotient)
partial quotient
= dividend
subtract divisor
from partial
Yes remainder
divisor < 0?
No
i < n?
No
Yes negate
Return divisor Yes
and indicate result > 0?
no error
left shift No
(remainder,
quotient)
partial quotient
Yes LSb = 1
dividend < 0?
subtract division
from partial
remainder No
negate restore partial
dividend quotient,
LSb = 0
Yes
result > 0?
i=0
clear remainder
No partial quotient
restore partial = dividend
quotient,
LSb = 0
No
Return
and indicate
no error
mÐ1 nÐ1
∑ ∑ bi 2
i i
where Au ≡ ai 2 , Bu ≡
i=0 i=0
Then p = A ⋅B = p′ + c
with
p′ ≡ A u ⋅ B u
being the unsigned product
of the two’s complement
m+n m n
representations and the c ≡ am Ð 1 bn Ð 1 2 Ð am Ð 1 Bu 2 + bn Ð 1 Au 2 }
correction term c given by
Case 1:
am Ð 1 = bn Ð 1 = 1
; $Revision: 2.3 $
;**********************************************************************************************
;**********************************************************************************************
SMUL3232L macro
MOVLW 0x8
MOVWF LOOPCOUNT
LOOPSM3232A
RRF BARGB3, F
BTFSC _C
MOVWF LOOPCOUNT
LOOPSM3232B
RRF BARGB2, F
BTFSC _C
GOTO BLSM3232NA
DECFSZ LOOPCOUNT, F
GOTO LOOPSM3232B
MOVWF LOOPCOUNT
LOOPSM3232C
RRF BARGB1, F
BTFSC _C
GOTO CLSM3232NA
DECFSZ LOOPCOUNT, F
GOTO LOOPSM3232C
MOVLW 0x7
MOVWF LOOPCOUNT
LOOPSM3232D
RRF BARGB0, F
BTFSC _C
GOTO DLSM3232NA
DECFSZ LOOPCOUNT, F
GOTO LOOPSM3232D
CLRF AARGB0
CLRF AARGB1
CLRF AARGB2
CLRF AARGB3
RETLW 0x00
ALOOPSM3232
RRF BARGB3, F
BTFSS _C
GOTO ALSM3232NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
BLOOPSM3232
RRF BARGB2, F
BTFSS _C
GOTO BLSM3232NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
MOVLW 0x8
MOVWF LOOPCOUNT
CLOOPSM3232
RRF BARGB1, F
BTFSS _C
GOTO CLSM3232NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
MOVLW 0x7
DLOOPSM3232
RRF BARGB0, F
BTFSS _C
GOTO DLSM3232NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
RLF SIGN,W
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
RRF AARGB6, F
RRF AARGB7, F
endm
UMUL3232L macro
MOVLW 0x08
MOVWF LOOPCOUNT
LOOPUM3232A
RRF BARGB3, F
BTFSC _C
GOTO ALUM3232NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM3232A
MOVWF LOOPCOUNT
MOVWF LOOPCOUNT
LOOPUM3232C
RRF BARGB1, F
BTFSC _C
GOTO CLUM3232NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM3232C
MOVWF LOOPCOUNT
LOOPUM3232D
RRF BARGB0, F
BTFSC _C
GOTO DLUM3232NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM3232D
CLRF AARGB0
CLRF AARGB1
CLRF AARGB2
CLRF AARGB3
RETLW 0x00
ALUM3232NAP BCF _C
GOTO ALUM3232NA
BLUM3232NAP BCF _C
GOTO BLUM3232NA
CLUM3232NAP BCF _C
GOTO CLUM3232NA
DLUM3232NAP BCF _C
GOTO DLUM3232NA
ALOOPUM3232
RRF BARGB3, F
BTFSS _C
GOTO ALUM3232NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
ALUM3232NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
MOVLW 0x08
MOVWF LOOPCOUNT
BLOOPUM3232
RRF BARGB2, F
BTFSS _C
GOTO BLUM3232NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
BLUM3232NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
DECFSZ LOOPCOUNT, F
GOTO BLOOPUM3232
MOVLW 0x08
MOVWF LOOPCOUNT
CLOOPUM3232
RRF BARGB1, F
BTFSS _C
GOTO CLUM3232NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
CLUM3232NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
MOVLW 0x08
MOVWF LOOPCOUNT
DLOOPUM3232
RRF BARGB0, F
BTFSS _C
GOTO DLUM3232NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
DLUM3232NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
RRF AARGB6, F
RRF AARGB7, F
DECFSZ LOOPCOUNT, F
GOTO DLOOPUM3232
endm
UMUL3131L macro
MOVLW 0x8
MOVWF LOOPCOUNT
LOOPUM3131A
RRF BARGB3, F
BTFSC _C
GOTO ALUM3131NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM3131A
MOVWF LOOPCOUNT
LOOPUM3131B
RRF BARGB2, F
BTFSC _C
GOTO BLUM3131NAP
MOVWF LOOPCOUNT
LOOPUM3131C
RRF BARGB1, F
BTFSC _C
GOTO CLUM3131NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM3131C
MOVLW 0x7
MOVWF LOOPCOUNT
LOOPUM3131D
RRF BARGB0, F
BTFSC _C
GOTO DLUM3131NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM3131D
CLRF AARGB0
CLRF AARGB1
CLRF AARGB2
CLRF AARGB3
RETLW 0x00
ALUM3131NAP BCF _C
GOTO ALUM3131NA
BLUM3131NAP BCF _C
GOTO BLUM3131NA
CLUM3131NAP BCF _C
GOTO CLUM3131NA
DLUM3131NAP BCF _C
GOTO DLUM3131NA
ALOOPUM3131
RRF BARGB3, F
BTFSS _C
GOTO ALUM3131NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
ALUM3131NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
DECFSZ LOOPCOUNT, F
MOVLW 0x08
MOVWF LOOPCOUNT
BLOOPUM3131
RRF BARGB2, F
BTFSS _C
GOTO BLUM3131NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
BLUM3131NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
DECFSZ LOOPCOUNT, F
GOTO BLOOPUM3131
MOVLW 0x08
MOVWF LOOPCOUNT
CLOOPUM3131
RRF BARGB1, F
BTFSS _C
GOTO CLUM3131NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
CLUM3131NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
RRF AARGB6, F
DECFSZ LOOPCOUNT, F
GOTO CLOOPUM3131
MOVLW 0x07
MOVWF LOOPCOUNT
DLOOPUM3131
RRF BARGB0, F
BTFSS _C
GOTO DLUM3131NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
DLUM3131NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
RRF AARGB6, F
RRF AARGB7, F
DECFSZ LOOPCOUNT, F
GOTO DLOOPUM3131
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
RRF AARGB6, F
RRF AARGB7, F
endm
SMUL3232 macro
variable i = 0
while i < 8
BTFSC BARGB3,i
GOTO SM3232NA#v(i)
variable i = i + 1
variable i = 8
while i < 16
BTFSC BARGB2,i-8
GOTO SM3232NA#v(i)
variable i = i + 1
endw
variable i = 16
while i < 24
BTFSC BARGB1,i-16
GOTO SM3232NA#v(i)
variable i = i + 1
endw
variable i = 24
while i < 31
BTFSC BARGB0,i-24
GOTO SM3232NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 8
BTFSS BARGB3,i
GOTO SM3232NA#v(i)
SM3232A#v(i) MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSS BARGB2,i-8
GOTO SM3232NA#v(i)
SM3232A#v(i) MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
SM3232NA#v(i) RLF SIGN,W
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
variable i = i + 1
endw
variable i = 16
while i < 24
BTFSS BARGB1,i-16
GOTO SM3232NA#v(i)
SM3232A#v(i) MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
SM3232NA#v(i) RLF SIGN,W
variable i = i + 1
endw
variable i = 24
while i < 31
BTFSS BARGB0,i-24
GOTO SM3232NA#v(i)
SM3232A#v(i) MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
SM3232NA#v(i) RLF SIGN,W
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
RRF AARGB6, F
RRF AARGB7, F
variable i = i + 1
endw
RLF SIGN,W
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
RRF AARGB6, F
RRF AARGB7, F
endm
UMUL3232 macro
variable i = 0
while i < 8
BTFSC BARGB3,i
GOTO UM3232NA#v(i)
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSC BARGB2,i-8
GOTO UM3232NA#v(i)
variable i = i + 1
endw
variable i = 16
while i < 24
BTFSC BARGB1,i-16
GOTO UM3232NA#v(i)
variable i = i + 1
endw
variable i = 24
while i < 32
BTFSC BARGB0,i-24
GOTO UM3232NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 8
BTFSS BARGB3,i
GOTO UM3232NA#v(i)
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSS BARGB2,i-8
GOTO UM3232NA#v(i)
UM3232A#v(i) MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM3232NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
variable i = i + 1
endw
variable i = 16
while i < 24
BTFSS BARGB1,i-16
GOTO UM3232NA#v(i)
UM3232A#v(i) MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
variable i = i + 1
endw
variable i = 24
while i < 32
BTFSS BARGB0,i-24
GOTO UM3232NA#v(i)
UM3232A#v(i) MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM3232NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
RRF AARGB6, F
RRF AARGB7, F
variable i = i + 1
endw
endm
UMUL3131 macro
variable i = 0
while i < 8
BTFSC BARGB3,i
GOTO UM3131NA#v(i)
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSC BARGB2,i-8
GOTO UM3131NA#v(i)
variable i = i + 1
endw
variable i = 16
while i < 24
BTFSC BARGB1,i-16
GOTO UM3131NA#v(i)
variable i = i + 1
endw
variable i = 24
while i < 31
BTFSC BARGB0,i-24
GOTO UM3131NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 8
BTFSS BARGB3,i
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSS BARGB2,i-8
GOTO UM3131NA#v(i)
UM3131A#v(i) MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM3131NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
variable i = i + 1
endw
variable i = 16
while i < 24
BTFSS BARGB1,i-16
GOTO UM3131NA#v(i)
UM3131A#v(i) MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
variable i = i + 1
endw
variable i = 24
while i < 31
BTFSS BARGB0,i-24
GOTO UM3131NA#v(i)
UM3131A#v(i) MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM3131NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
RRF AARGB6, F
RRF AARGB7, F
variable i = i + 1
endw
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
RRF AARGB6, F
RRF AARGB7, F
endm
MOVF AARGB0,W
XORWF BARGB0,W
MOVWF TEMPB0
BTFSC TEMPB0,MSB
COMF SIGN,F
BTFSS BARGB0,MSB
GOTO M3232SOK
COMF BARGB3, F
COMF BARGB2, F
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB3, F
BTFSC _Z
INCF BARGB2, F
BTFSC _Z
INCF BARGB1, F
BTFSC _Z
INCF BARGB0, F
COMF AARGB3, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB3, F
BTFSC _Z
INCF AARGB2, F
BTFSC _Z
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
BTFSC BARGB0,MSB
GOTO M3232SX
SMUL3232L
RETLW 0x00
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
FXM3232U
CLRF AARGB4 ; clear partial product
CLRF AARGB5
CLRF AARGB7
CLRF AARGB6
MOVF AARGB0,W
MOVWF TEMPB0
MOVF AARGB1,W
MOVWF TEMPB1
MOVF AARGB2,W
MOVWF TEMPB2
MOVF AARGB3,W
MOVWF TEMPB3
UMUL3232L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
FXM3131U
CLRF AARGB4 ; clear partial product
CLRF AARGB5
CLRF AARGB7
CLRF AARGB6
MOVF AARGB0,W
MOVWF TEMPB0
MOVF AARGB1,W
MOVWF TEMPB1
MOVF AARGB2,W
MOVWF TEMPB2
MOVF AARGB3,W
MOVWF TEMPB3
UMUL3131L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
; $Revision: 2.4 $
;**********************************************************************************************
;**********************************************************************************************
SMUL3224L macro
MOVLW 0x8
MOVWF LOOPCOUNT
LOOPSM3224A
RRF BARGB2,F
BTFSC _C
GOTO ALSM3224NA
DECFSZ LOOPCOUNT,F
GOTO LOOPSM3224A
MOVWF LOOPCOUNT
LOOPSM3224B
RRF BARGB1,F
BTFSC _C
GOTO BLSM3224NA
DECFSZ LOOPCOUNT,F
GOTO LOOPSM3224B
MOVLW 0x7
MOVWF LOOPCOUNT
CLRF AARGB0
CLRF AARGB1
CLRF AARGB2
CLRF AARGB3
RETLW 0x00
ALOOPSM3224
RRF BARGB2,F
BTFSS _C
GOTO ALSM3224NA
MOVF TEMPB3,W
ADDWF AARGB3,F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2,F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1,F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0,F
MOVLW 0x8
MOVWF LOOPCOUNT
BLOOPSM3224
RRF BARGB1,F
BTFSS _C
GOTO BLSM3224NA
MOVF TEMPB3,W
ADDWF AARGB3,F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2,F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1,F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0,F
MOVLW 0x7
MOVWF LOOPCOUNT
CLOOPSM3224
RRF BARGB0,F
BTFSS _C
GOTO CLSM3224NA
MOVF TEMPB3,W
ADDWF AARGB3,F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2,F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1,F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0,F
RLF SIGN,W
RRF AARGB0,F
RRF AARGB1,F
RRF AARGB2,F
RRF AARGB3,F
RRF AARGB4,F
RRF AARGB5,F
RRF AARGB6,F
endm
UMUL3224L macro
MOVLW 0x08
MOVWF LOOPCOUNT
LOOPUM3224A
RRF BARGB2,F
BTFSC _C
GOTO ALUM3224NAP
MOVWF LOOPCOUNT
LOOPUM3224B
RRF BARGB1,F
BTFSC _C
GOTO BLUM3224NAP
DECFSZ LOOPCOUNT,F
GOTO LOOPUM3224B
MOVWF LOOPCOUNT
LOOPUM3224C
RRF BARGB0,F
BTFSC _C
GOTO CLUM3224NAP
DECFSZ LOOPCOUNT,F
GOTO LOOPUM3224C
CLRF AARGB0
CLRF AARGB1
CLRF AARGB2
CLRF AARGB3
RETLW 0x00
ALUM3224NAP BCF _C
GOTO ALUM3224NA
BLUM3224NAP BCF _C
GOTO BLUM3224NA
CLUM3224NAP BCF _C
GOTO CLUM3224NA
ALOOPUM3224
RRF BARGB2,F
BTFSS _C
GOTO ALUM3224NA
MOVF TEMPB3,W
ADDWF AARGB3,F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2,F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1,F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0,F
ALUM3224NA
RRF AARGB0,F
RRF AARGB1,F
RRF AARGB2,F
RRF AARGB3,F
RRF AARGB4,F
DECFSZ LOOPCOUNT,F
GOTO ALOOPUM3224
MOVLW 0x08
MOVWF LOOPCOUNT
BLOOPUM3224
RRF BARGB1,F
BTFSS _C
GOTO BLUM3224NA
MOVF TEMPB3,W
ADDWF AARGB3,F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2,F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1,F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0,F
BLUM3224NA
RRF AARGB0,F
RRF AARGB1,F
RRF AARGB2,F
RRF AARGB3,F
RRF AARGB4,F
RRF AARGB5,F
DECFSZ LOOPCOUNT,F
GOTO BLOOPUM3224
MOVLW 0x08
MOVWF LOOPCOUNT
CLOOPUM3224
RRF BARGB0,F
BTFSS _C
GOTO CLUM3224NA
MOVF TEMPB3,W
ADDWF AARGB3,F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2,F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1,F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0,F
CLUM3224NA
RRF AARGB0,F
RRF AARGB1,F
RRF AARGB2,F
RRF AARGB3,F
RRF AARGB4,F
RRF AARGB5,F
RRF AARGB6,F
DECFSZ LOOPCOUNT,F
GOTO CLOOPUM3224
endm
UMUL3123L macro
MOVLW 0x8
MOVWF LOOPCOUNT
LOOPUM3123A
RRF BARGB2,F
BTFSC _C
GOTO ALUM3123NAP
DECFSZ LOOPCOUNT,F
GOTO LOOPUM3123A
MOVWF LOOPCOUNT
LOOPUM3123B
RRF BARGB1,F
BTFSC _C
GOTO BLUM3123NAP
DECFSZ LOOPCOUNT,F
GOTO LOOPUM3123B
MOVLW 0x7
MOVWF LOOPCOUNT
LOOPUM3123C
RRF BARGB0,F
BTFSC _C
GOTO CLUM3123NAP
DECFSZ LOOPCOUNT,F
GOTO LOOPUM3123C
CLRF AARGB0
CLRF AARGB1
CLRF AARGB2
CLRF AARGB3
RETLW 0x00
ALUM3123NAP BCF _C
GOTO ALUM3123NA
BLUM3123NAP BCF _C
GOTO BLUM3123NA
CLUM3123NAP BCF _C
GOTO CLUM3123NA
ALOOPUM3123
RRF BARGB2,F
BTFSS _C
GOTO ALUM3123NA
MOVF TEMPB3,W
ADDWF AARGB3,F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2,F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ALUM3123NA
RRF AARGB0,F
RRF AARGB1,F
RRF AARGB2,F
RRF AARGB3,F
RRF AARGB4,F
DECFSZ LOOPCOUNT,F
GOTO ALOOPUM3123
MOVLW 0x08
MOVWF LOOPCOUNT
BLOOPUM3123
RRF BARGB1,F
BTFSS _C
GOTO BLUM3123NA
MOVF TEMPB3,W
ADDWF AARGB3,F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2,F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1,F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0,F
BLUM3123NA
RRF AARGB0,F
RRF AARGB1,F
RRF AARGB2,F
RRF AARGB3,F
RRF AARGB4,F
RRF AARGB5,F
DECFSZ LOOPCOUNT,F
GOTO BLOOPUM3123
MOVLW 0x07
MOVWF LOOPCOUNT
CLOOPUM3123
RRF BARGB0,F
BTFSS _C
GOTO CLUM3123NA
MOVF TEMPB3,W
ADDWF AARGB3,F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2,F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1,F
MOVF TEMPB0,W
BTFSC _C
CLUM3123NA
RRF AARGB0,F
RRF AARGB1,F
RRF AARGB2,F
RRF AARGB3,F
RRF AARGB4,F
RRF AARGB5,F
RRF AARGB6,F
DECFSZ LOOPCOUNT,F
GOTO CLOOPUM3123
RRF AARGB0,F
RRF AARGB1,F
RRF AARGB2,F
RRF AARGB3,F
RRF AARGB4,F
RRF AARGB5,F
RRF AARGB6,F
endm
SMUL3224 macro
variable i = 0
while i < 8
BTFSC BARGB2,i
GOTO SM3224NA#v(i)
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSC BARGB1,i-8
GOTO SM3224NA#v(i)
variable i = i + 1
endw
variable i = 16
while i < 23
BTFSC BARGB0,i-16
GOTO SM3224NA#v(i)
variable i = i + 1
variable i = 1
while i < 8
BTFSS BARGB2,i
GOTO SM3224NA#v(i)
SM3224A#v(i) MOVF TEMPB3,W
ADDWF AARGB3,F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2,F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1,F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0,F
SM3224NA#v(i) RLF SIGN,W
RRF AARGB0,F
RRF AARGB1,F
RRF AARGB2,F
RRF AARGB3,F
RRF AARGB4,F
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSS BARGB1,i-8
GOTO SM3224NA#v(i)
SM3224A#v(i) MOVF TEMPB3,W
ADDWF AARGB3,F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2,F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1,F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0,F
variable i = i + 1
endw
variable i = 16
while i < 23
BTFSS BARGB0,i-16
GOTO SM3224NA#v(i)
SM3224A#v(i) MOVF TEMPB3,W
ADDWF AARGB3,F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2,F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1,F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0,F
SM3224NA#v(i) RLF SIGN,W
RRF AARGB0,F
RRF AARGB1,F
RRF AARGB2,F
RRF AARGB3,F
RRF AARGB4,F
RRF AARGB5,F
RRF AARGB6,F
variable i = i + 1
endw
RLF SIGN,W
RRF AARGB0,F
RRF AARGB1,F
RRF AARGB2,F
RRF AARGB3,F
RRF AARGB4,F
RRF AARGB5,F
RRF AARGB6,F
endm
UMUL3224 macro
while i < 8
BTFSC BARGB2,i
GOTO UM3224NA#v(i)
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSC BARGB1,i-8
GOTO UM3224NA#v(i)
variable i = i + 1
endw
variable i = 16
while i < 24
BTFSC BARGB0,i-16
GOTO UM3224NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 8
BTFSS BARGB2,i
GOTO UM3224NA#v(i)
UM3224A#v(i) MOVF TEMPB3,W
ADDWF AARGB3,F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2,F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1,F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSS BARGB1,i-8
GOTO UM3224NA#v(i)
UM3224A#v(i) MOVF TEMPB3,W
ADDWF AARGB3,F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2,F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1,F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0,F
UM3224NA#v(i) RRF AARGB0,F
RRF AARGB1,F
RRF AARGB2,F
RRF AARGB3,F
RRF AARGB4,F
RRF AARGB5,F
variable i = i + 1
endw
variable i = 16
while i < 24
BTFSS BARGB0,i-16
GOTO UM3224NA#v(i)
UM3224A#v(i) MOVF TEMPB3,W
ADDWF AARGB3,F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2,F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1,F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0,F
UM3224NA#v(i) RRF AARGB0,F
RRF AARGB1,F
RRF AARGB2,F
RRF AARGB3,F
variable i = i + 1
endw
endm
UMUL3123 macro
variable i = 0
while i < 8
BTFSC BARGB2,i
GOTO UM3123NA#v(i)
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSC BARGB1,i-8
GOTO UM3123NA#v(i)
variable i = i + 1
endw
variable i = 16
while i < 23
BTFSC BARGB0,i-16
GOTO UM3123NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 8
BTFSS BARGB2,i
GOTO UM3123NA#v(i)
UM3123A#v(i) MOVF TEMPB3,W
ADDWF AARGB3,F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2,F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1,F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0,F
UM3123NA#v(i) RRF AARGB0,F
RRF AARGB1,F
RRF AARGB2,F
RRF AARGB3,F
RRF AARGB4,F
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSS BARGB1,i-8
GOTO UM3123NA#v(i)
UM3123A#v(i) MOVF TEMPB3,W
ADDWF AARGB3,F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2,F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1,F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0,F
UM3123NA#v(i) RRF AARGB0,F
RRF AARGB1,F
RRF AARGB2,F
RRF AARGB3,F
RRF AARGB4,F
RRF AARGB5,F
variable i = i + 1
endw
variable i = 16
while i < 23
variable i = i + 1
endw
RRF AARGB0,F
RRF AARGB1,F
RRF AARGB2,F
RRF AARGB3,F
RRF AARGB4,F
RRF AARGB5,F
RRF AARGB6,F
endm
;**********************************************************************************************
;**********************************************************************************************
MOVF AARGB0,W
XORWF BARGB0,W
MOVWF TEMPB0
BTFSC TEMPB0,MSB
COMF SIGN,F
BTFSS BARGB0,MSB
GOTO M3224SOK
COMF BARGB2, F
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB2, F
BTFSC _Z
INCF BARGB1, F
BTFSC _Z
INCF BARGB0, F
COMF AARGB3, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB3, F
BTFSC _Z
INCF AARGB2, F
BTFSC _Z
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
BTFSC BARGB0,MSB
GOTO M3224SX
SMUL3224L
RETLW 0x00
RETLW 0x00
;**********************************************************************************************
FXM3224U
CLRF AARGB4 ; clear partial product
CLRF AARGB5
CLRF AARGB6
MOVF AARGB0,W
MOVWF TEMPB0
MOVF AARGB1,W
MOVWF TEMPB1
MOVF AARGB2,W
MOVWF TEMPB2
MOVF AARGB3,W
MOVWF TEMPB3
UMUL3224L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
FXM3123U
CLRF AARGB4 ; clear partial product
CLRF AARGB5
CLRF AARGB6
UMUL3123L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
; $Revision: 2.3 $
;**********************************************************************************************
;**********************************************************************************************
SMUL3216L macro
MOVLW 0x8
MOVWF LOOPCOUNT
LOOPSM3216A
RRF BARGB1, F
BTFSC _C
GOTO ALSM3216NA
DECFSZ LOOPCOUNT, F
GOTO LOOPSM3216A
MOVLW 0x7
MOVWF LOOPCOUNT
LOOPSM3216B
RRF BARGB0, F
BTFSC _C
GOTO BLSM3216NA
DECFSZ LOOPCOUNT, F
GOTO LOOPSM3216B
CLRF AARGB0
CLRF AARGB1
ALOOPSM3216
RRF BARGB1, F
BTFSS _C
GOTO ALSM3216NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
MOVLW 0x7
MOVWF LOOPCOUNT
BLOOPSM3216
RRF BARGB0, F
BTFSS _C
GOTO BLSM3216NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
RLF TEMPB0,W
RRF AARGB0, F
endm
UMUL3216L macro
; PM: 73 DM: 11
MOVLW 0x08
MOVWF LOOPCOUNT
LOOPUM3216A
RRF BARGB1, F
BTFSC _C
GOTO ALUM3216NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM3216A
MOVWF LOOPCOUNT
LOOPUM3216B
RRF BARGB0, F
BTFSC _C
GOTO BLUM3216NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM3216B
CLRF AARGB0
CLRF AARGB1
CLRF AARGB2
CLRF AARGB3
RETLW 0x00
BLUM3216NAP
BCF _C
GOTO BLUM3216NA
ALUM3216NAP
BCF _C
GOTO ALUM3216NA
ALOOPUM3216
RRF BARGB1, F
BTFSS _C
GOTO ALUM3216NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ALUM3216NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
DECFSZ LOOPCOUNT, F
GOTO ALOOPUM3216
MOVLW 0x08
MOVWF LOOPCOUNT
BLOOPUM3216
RRF BARGB0, F
BTFSS _C
GOTO BLUM3216NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
BLUM3216NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
DECFSZ LOOPCOUNT, F
GOTO BLOOPUM3216
endm
UMUL3115L macro
; PM: 80 DM: 11
MOVLW 0x8
MOVWF LOOPCOUNT
LOOPUM3115A
RRF BARGB1, F
BTFSC _C
GOTO ALUM3115NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM3115A
MOVLW 0x7
LOOPUM3115B
RRF BARGB0, F
BTFSC _C
GOTO BLUM3115NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM3115B
CLRF AARGB0
CLRF AARGB1
CLRF AARGB2
CLRF AARGB3
RETLW 0x00
BLUM3115NAP
BCF _C
GOTO BLUM3115NA
ALUM3115NAP
BCF _C
GOTO ALUM3115NA
ALOOPUM3115
RRF BARGB1, F
BTFSS _C
GOTO ALUM3115NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
ALUM3115NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
DECFSZ LOOPCOUNT, F
GOTO ALOOPUM3115
MOVLW 0x07
MOVWF LOOPCOUNT
BLOOPUM3115
RRF BARGB0, F
BTFSS _C
GOTO BLUM3115NA
MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
BLUM3115NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
DECFSZ LOOPCOUNT, F
GOTO BLOOPUM3115
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
endm
SMUL3216 macro
variable i = 0
BTFSC SIGN,MSB
COMF AARGB4, F
MOVF AARGB4,W
MOVWF AARGB5
RLF SIGN,W
while i < 8
BTFSC BARGB1,i
GOTO SM3216NA#v(i)
BCF AARGB4,7-i
variable i = i + 1
endw
variable i = 8
while i < 15
BTFSC BARGB0,i-8
GOTO SM3216NA#v(i)
BCF AARGB5,15-i
variable i = i + 1
endw
SM3216NA0
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
variable i = 1
while i < 8
BTFSS BARGB1,i
GOTO SM3216NA#v(i)
SM3216A#v(i) MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
SM3216NA#v(i)
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
variable i = i + 1
endw
variable i = 8
while i < 15
BTFSS BARGB0,i-8
GOTO SM3216NA#v(i)
SM3216A#v(i) MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
variable i = i + 1
endw
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
endm
UMUL3216 macro
variable i = 0
while i < 8
BTFSC BARGB1,i
GOTO UM3216NA#v(i)
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSC BARGB0,i-8
GOTO UM3216NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 8
BTFSS BARGB1,i
GOTO UM3216NA#v(i)
UM3216A#v(i) MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM3216NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSS BARGB0,i-8
GOTO UM3216NA#v(i)
UM3216A#v(i) MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM3216NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
variable i = i + 1
endw
endm
variable i = 0
while i < 8
BTFSC BARGB1,i
GOTO UM3115NA#v(i)
variable i = i + 1
endw
variable i = 8
while i < 15
BTFSC BARGB0,i-8
GOTO UM3115NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 8
BTFSS BARGB1,i
GOTO UM3115NA#v(i)
UM3115A#v(i) MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM3115NA#v(i) RRF AARGB0, F
variable i = i + 1
endw
variable i = 8
while i < 15
BTFSS BARGB0,i-8
GOTO UM3115NA#v(i)
UM3115A#v(i) MOVF TEMPB3,W
ADDWF AARGB3, F
MOVF TEMPB2,W
BTFSC _C
INCFSZ TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM3115NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
variable i = i + 1
endw
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
endm
;**********************************************************************************************
;**********************************************************************************************
MOVF AARGB0,W
XORWF BARGB0,W
MOVWF TEMPB0
BTFSC TEMPB0,MSB
COMF SIGN,F
BTFSS BARGB0,MSB
GOTO M3216SOK
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB1, F
BTFSC _Z
INCF BARGB0, F
COMF AARGB3, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB3, F
BTFSC _Z
INCF AARGB2, F
BTFSC _Z
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
BTFSC BARGB0,MSB
GOTO M3216SX
SMUL3216L
RETLW 0x00
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
FXM3216U
CLRF AARGB4 ; clear partial product
CLRF AARGB5
MOVF AARGB0,W
MOVWF TEMPB0
MOVF AARGB1,W
MOVWF TEMPB1
MOVF AARGB2,W
MOVWF TEMPB2
MOVF AARGB3,W
MOVWF TEMPB3
UMUL3216L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
FXM3115U
CLRF AARGB4 ; clear partial product
CLRF AARGB5
MOVF AARGB0,W
MOVWF TEMPB0
MOVF AARGB1,W
UMUL3115L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
; $Revision: 2.3 $
;**********************************************************************************************
;**********************************************************************************************
SMUL2424L macro
MOVLW 0x8
MOVWF LOOPCOUNT
LOOPSM2424A
RRF BARGB2, F
BTFSC _C
GOTO ALSM2424NA
DECFSZ LOOPCOUNT, F
GOTO LOOPSM2424A
MOVWF LOOPCOUNT
LOOPSM2424B
RRF BARGB1, F
BTFSC _C
GOTO BLSM2424NA
DECFSZ LOOPCOUNT, F
GOTO LOOPSM2424B
MOVLW 0x7
MOVWF LOOPCOUNT
CLRF AARGB0
CLRF AARGB1
CLRF AARGB2
RETLW 0x00
ALOOPSM2424
RRF BARGB2, F
BTFSS _C
GOTO ALSM2424NA
MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
MOVLW 0x8
MOVWF LOOPCOUNT
BLOOPSM2424
RRF BARGB1, F
BTFSS _C
GOTO BLSM2424NA
MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
MOVLW 0x7
MOVWF LOOPCOUNT
RLF SIGN,W
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
endm
UMUL2424L macro
MOVLW 0x08
MOVWF LOOPCOUNT
LOOPUM2424A
RRF BARGB2, F
BTFSC _C
GOTO ALUM2424NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM2424A
MOVWF LOOPCOUNT
LOOPUM2424B
RRF BARGB1, F
BTFSC _C
GOTO BLUM2424NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM2424B
MOVWF LOOPCOUNT
LOOPUM2424C
CLRF AARGB0
CLRF AARGB1
CLRF AARGB2
RETLW 0x00
CLUM2424NAP
BCF _C
GOTO CLUM2424NA
BLUM2424NAP
BCF _C
GOTO BLUM2424NA
ALUM2424NAP
BCF _C
GOTO ALUM2424NA
ALOOPUM2424
RRF BARGB2, F
BTFSS _C
GOTO ALUM2424NA
MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
ALUM2424NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
DECFSZ LOOPCOUNT, F
GOTO ALOOPUM2424
MOVLW 0x08
MOVWF LOOPCOUNT
BLOOPUM2424
RRF BARGB1, F
BTFSS _C
GOTO BLUM2424NA
MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
BLUM2424NA
RRF AARGB0, F
MOVLW 0x08
MOVWF LOOPCOUNT
CLOOPUM2424
RRF BARGB0, F
BTFSS _C
GOTO CLUM2424NA
MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
CLUM2424NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
DECFSZ LOOPCOUNT, F
GOTO CLOOPUM2424
endm
UMUL2323L macro
MOVLW 0x8
MOVWF LOOPCOUNT
LOOPUM2323A
RRF BARGB2, F
BTFSC _C
GOTO ALUM2323NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM2323A
MOVWF LOOPCOUNT
LOOPUM2323B
RRF BARGB1, F
BTFSC _C
GOTO BLUM2323NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM2323B
MOVLW 0x7
MOVWF LOOPCOUNT
LOOPUM2323C
RRF BARGB0, F
BTFSC _C
GOTO CLUM2323NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM2323C
CLRF AARGB0
CLRF AARGB1
CLRF AARGB2
RETLW 0x00
CLUM2323NAP
BCF _C
GOTO CLUM2323NA
BLUM2323NAP
BCF _C
GOTO BLUM2323NA
ALUM2323NAP
BCF _C
GOTO ALUM2323NA
ALOOPUM2323
RRF BARGB2, F
BTFSS _C
GOTO ALUM2323NA
MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
ALUM2323NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
DECFSZ LOOPCOUNT, F
GOTO ALOOPUM2323
MOVLW 0x08
MOVWF LOOPCOUNT
BLOOPUM2323
RRF BARGB1, F
BTFSS _C
GOTO BLUM2323NA
MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
BLUM2323NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
DECFSZ LOOPCOUNT, F
GOTO BLOOPUM2323
MOVLW 0x07
MOVWF LOOPCOUNT
CLOOPUM2323
RRF BARGB0, F
BTFSS _C
GOTO CLUM2323NA
MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
CLUM2323NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
DECFSZ LOOPCOUNT, F
GOTO CLOOPUM2323
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
endm
SMUL2424 macro
variable i = 0
while i < 8
BTFSC BARGB2,i
GOTO SM2424NA#v(i)
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSC BARGB1,i-8
GOTO SM2424NA#v(i)
variable i = i + 1
endw
variable i = 16
while i < 23
BTFSC BARGB0,i-16
GOTO SM2424NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 8
BTFSS BARGB2,i
GOTO SM2424NA#v(i)
SM2424A#v(i) MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
SM2424NA#v(i) RLF SIGN,W, F
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
variable i = i + 1
endw
variable i = 8
BTFSS BARGB1,i-8
GOTO SM2424NA#v(i)
SM2424A#v(i) MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
SM2424NA#v(i) RLF SIGN,W
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
variable i = i + 1
endw
variable i = 16
while i < 23
BTFSS BARGB0,i-16
GOTO SM2424NA#v(i)
SM2424A#v(i) MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
SM2424NA#v(i) RLF TEMPB0,W
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
variable i = i + 1
endw
RLF TEMPB0,W
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
endm
UMUL2424 macro
variable i = 0
while i < 8
BTFSC BARGB2,i
GOTO UM2424NA#v(i)
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSC BARGB1,i-8
GOTO UM2424NA#v(i)
variable i = i + 1
endw
variable i = 16
while i < 24
BTFSC BARGB0,i-16
GOTO UM2424NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 8
BTFSS BARGB2,i
GOTO UM2424NA#v(i)
UM2424A#v(i) MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSS BARGB1,i-8
GOTO UM2424NA#v(i)
UM2424A#v(i) MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM2424NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
variable i = i + 1
endw
variable i = 16
while i < 24
BTFSS BARGB0,i-16
GOTO UM2424NA#v(i)
UM2424A#v(i) MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM2424NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
variable i = i + 1
endw
endm
UMUL2323 macro
variable i = 0
while i < 8
BTFSC BARGB2,i
GOTO UM2323NA#v(i)
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSC BARGB1,i-8
GOTO UM2323NA#v(i)
variable i = i + 1
endw
variable i = 16
while i < 23
BTFSC BARGB0,i-16
GOTO UM2323NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 8
BTFSS BARGB2,i
GOTO UM2323NA#v(i)
UM2323A#v(i) MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSS BARGB1,i-8
GOTO UM2323NA#v(i)
UM2323A#v(i) MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM2323NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
variable i = i + 1
endw
variable i = 16
while i < 23
BTFSS BARGB0,i-16
GOTO UM2323NA#v(i)
UM2323A#v(i) MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM2323NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
variable i = i + 1
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
RRF AARGB5, F
endm
;**********************************************************************************************
;**********************************************************************************************
MOVF AARGB0,W
XORWF BARGB0,W
MOVWF TEMPB0
BTFSC TEMPB0,MSB
COMF SIGN,F
BTFSS BARGB0,MSB
GOTO M2424SOK
COMF BARGB2, F
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB2, F
BTFSC _Z
INCF BARGB1, F
BTFSC _Z
INCF BARGB0, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB2, F
BTFSC _Z
INCF AARGB1, F
BTFSC BARGB0,MSB
GOTO M2424SX
SMUL2424L
RETLW 0x00
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
FXM2424U
CLRF AARGB3 ; clear partial product
CLRF AARGB4
CLRF AARGB5
MOVF AARGB0,W
MOVWF TEMPB0
MOVF AARGB1,W
MOVWF TEMPB1
MOVF AARGB2,W
MOVWF TEMPB2
UMUL2424L
RETLW 0x00
;**********************************************************************************************
FXM2323U
CLRF AARGB3 ; clear partial product
CLRF AARGB4
CLRF AARGB5
MOVF AARGB0,W
MOVWF TEMPB0
MOVF AARGB1,W
MOVWF TEMPB1
MOVF AARGB2,W
MOVWF TEMPB2
UMUL2323L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
; $Revision: 2.3 $
;**********************************************************************************************
;**********************************************************************************************
SMUL2416L macro
MOVLW 0x8
MOVWF LOOPCOUNT
LOOPSM2416A
RRF BARGB1, F
BTFSC _C
GOTO ALSM2416NA
DECFSZ LOOPCOUNT, F
GOTO LOOPSM2416A
MOVLW 0x7
MOVWF LOOPCOUNT
LOOPSM2416B
RRF BARGB0, F
BTFSC _C
GOTO BLSM2416NA
DECFSZ LOOPCOUNT, F
GOTO LOOPSM2416B
CLRF AARGB0
CLRF AARGB1
ALOOPSM2416
RRF BARGB1, F
BTFSS _C
GOTO ALSM2416NA
MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
MOVLW 0x7
MOVWF LOOPCOUNT
BLOOPSM2416
RRF BARGB0, F
BTFSS _C
GOTO BLSM2416NA
MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
RLF SIGN,W
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
endm
UMUL2416L macro
MOVLW 0x08
MOVWF LOOPCOUNT
LOOPUM2416A
RRF BARGB1, F
BTFSC _C
GOTO ALUM2416NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM2416A
MOVWF LOOPCOUNT
LOOPUM2416B
RRF BARGB0, F
BTFSC _C
GOTO BLUM2416NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM2416B
CLRF AARGB0
CLRF AARGB1
CLRF AARGB2
RETLW 0x00
BLUM2416NAP
BCF _C
GOTO BLUM2416NA
ALUM2416NAP
BCF _C
GOTO ALUM2416NA
ALOOPUM2416
RRF BARGB1, F
BTFSS _C
GOTO ALUM2416NA
MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
ALUM2416NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
DECFSZ LOOPCOUNT, F
GOTO ALOOPUM2416
MOVLW 0x08
MOVWF LOOPCOUNT
BLOOPUM2416
RRF BARGB0, F
BLUM2416NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
DECFSZ LOOPCOUNT, F
GOTO BLOOPUM2416
endm
UMUL2315L macro
MOVLW 0x8
MOVWF LOOPCOUNT
LOOPUM2315A
RRF BARGB1, F
BTFSC _C
GOTO ALUM2315NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM2315A
MOVLW 0x7
MOVWF LOOPCOUNT
LOOPUM2315B
RRF BARGB0, F
BTFSC _C
GOTO BLUM2315NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM2315B
CLRF AARGB0
CLRF AARGB1
CLRF AARGB2
RETLW 0x00
BLUM2315NAP
BCF _C
GOTO BLUM2315NA
ALUM2315NAP
BCF _C
ALOOPUM2315
RRF BARGB1, F
BTFSS _C
GOTO ALUM2315NA
MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
ALUM2315NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
DECFSZ LOOPCOUNT, F
GOTO ALOOPUM2315
MOVLW 0x07
MOVWF LOOPCOUNT
BLOOPUM2315
RRF BARGB0, F
BTFSS _C
GOTO BLUM2315NA
MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
BLUM2315NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
DECFSZ LOOPCOUNT, F
GOTO BLOOPUM2315
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
endm
SMUL2416 macro
variable i = 0
while i < 8
BTFSC BARGB1,i
GOTO SM2416NA#v(i)
variable i = i + 1
endw
variable i = 8
while i < 15
BTFSC BARGB0,i-8
GOTO SM2416NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 8
BTFSS BARGB1,i
GOTO SM2416NA#v(i)
SM2416A#v(i) MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
SM2416NA#v(i) RLF SIGN,W
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
variable i = i + 1
endw
variable i = 8
BTFSS BARGB0,i-8
GOTO SM2416NA#v(i)
SM2416A#v(i) MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
SM2416NA#v(i) RLF SIGN,W
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
variable i = i + 1
endw
RLF SIGN,W
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
endm
UMUL2416 macro
variable i = 0
while i < 8
BTFSC BARGB1,i
GOTO UM2416NA#v(i)
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSC BARGB0,i-8
GOTO UM2416NA#v(i)
variable i = i + 1
variable i = 1
while i < 8
BTFSS BARGB1,i
GOTO UM2416NA#v(i)
UM2416A#v(i) MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM2416NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSS BARGB0,i-8
GOTO UM2416NA#v(i)
UM2416A#v(i) MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM2416NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
variable i = i + 1
endw
endm
variable i = 0
while i < 8
BTFSC BARGB1,i
GOTO UM2315NA#v(i)
variable i = i + 1
endw
variable i = 8
while i < 15
BTFSC BARGB0,i-8
GOTO UM2315NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 8
BTFSS BARGB1,i
GOTO UM2315NA#v(i)
UM2315A#v(i) MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM2315NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
variable i = i + 1
variable i = 8
while i < 15
BTFSS BARGB0,i-8
GOTO UM2315NA#v(i)
UM2315A#v(i) MOVF TEMPB2,W
ADDWF AARGB2, F
MOVF TEMPB1,W
BTFSC _C
INCFSZ TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM2315NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
variable i = i + 1
endw
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
RRF AARGB4, F
endm
;**********************************************************************************************
;**********************************************************************************************
BTFSS BARGB0,MSB
GOTO M2416SOK
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB1, F
BTFSC _Z
INCF BARGB0, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB2, F
BTFSC _Z
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
BTFSC BARGB0,MSB
GOTO M2416SX
SMUL2416L
RETLW 0x00
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
FXM2416U
CLRF AARGB3 ; clear partial product
CLRF AARGB4
MOVF AARGB0,W
MOVWF TEMPB0
MOVF AARGB1,W
MOVWF TEMPB1
MOVF AARGB2,W
MOVWF TEMPB2
UMUL2416L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
FXM2315U
CLRF AARGB3 ; clear partial product
CLRF AARGB4
MOVF AARGB0,W
MOVWF TEMPB0
MOVF AARGB1,W
MOVWF TEMPB1
MOVF AARGB2,W
MOVWF TEMPB2
UMUL2315L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
; $Revision: 2.3 $
;**********************************************************************************************
;**********************************************************************************************
SMUL1616L macro
; PM: 55 DM: 9
MOVLW 0x8
MOVWF LOOPCOUNT
LOOPSM1616A
RRF BARGB1, F
BTFSC _C
GOTO ALSM1616NA
DECFSZ LOOPCOUNT, F
GOTO LOOPSM1616A
MOVLW 0x7
MOVWF LOOPCOUNT
LOOPSM1616B
RRF BARGB0, F
BTFSC _C
GOTO BLSM1616NA
DECFSZ LOOPCOUNT, F
GOTO LOOPSM1616B
CLRF AARGB0
CLRF AARGB1
ALOOPSM1616
RRF BARGB1, F
BTFSS _C
GOTO ALSM1616NA
MOVF TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
MOVLW 0x7
MOVWF LOOPCOUNT
BLOOPSM1616
RRF BARGB0, F
BTFSS _C
GOTO BLSM1616NA
MOVF TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
RLF SIGN,W
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
endm
UMUL1616L macro
; PM: 51 DM: 9
MOVLW 0x08
MOVWF LOOPCOUNT
LOOPUM1616A
RRF BARGB1, F
BTFSC _C
GOTO ALUM1616NAP
DECFSZ LOOPCOUNT, F
MOVWF LOOPCOUNT
LOOPUM1616B
RRF BARGB0, F
BTFSC _C
GOTO BLUM1616NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM1616B
CLRF AARGB0
CLRF AARGB1
RETLW 0x00
BLUM1616NAP
BCF _C
GOTO BLUM1616NA
ALUM1616NAP
BCF _C
GOTO ALUM1616NA
ALOOPUM1616
RRF BARGB1, F
BTFSS _C
GOTO ALUM1616NA
MOVF TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
ALUM1616NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
DECFSZ LOOPCOUNT, F
GOTO ALOOPUM1616
MOVLW 0x08
MOVWF LOOPCOUNT
BLOOPUM1616
RRF BARGB0, F
BTFSS _C
GOTO BLUM1616NA
MOVF TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
BLUM1616NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
DECFSZ LOOPCOUNT, F
GOTO BLOOPUM1616
endm
UMUL1515L macro
; PM: 56 DM: 9
MOVLW 0x8
MOVWF LOOPCOUNT
LOOPUM1515A
RRF BARGB1, F
BTFSC _C
GOTO ALUM1515NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM1515A
MOVLW 0x7
MOVWF LOOPCOUNT
LOOPUM1515B
RRF BARGB0, F
BTFSC _C
GOTO BLUM1515NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM1515B
CLRF AARGB0
CLRF AARGB1
RETLW 0x00
BLUM1515NAP
BCF _C
GOTO BLUM1515NA
ALUM1515NAP
BCF _C
GOTO ALUM1515NA
ALOOPUM1515
RRF BARGB1, F
BTFSS _C
GOTO ALUM1515NA
MOVF TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
ALUM1515NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
DECFSZ LOOPCOUNT, F
GOTO ALOOPUM1515
MOVLW 0x07
MOVWF LOOPCOUNT
BLOOPUM1515
RRF BARGB0, F
BTFSS _C
GOTO BLUM1515NA
BLUM1515NA
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
DECFSZ LOOPCOUNT, F
GOTO BLOOPUM1515
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
endm
SMUL1616 macro
variable i = 0
BTFSC SIGN,MSB
COMF AARGB2, F
MOVF AARGB2,W
MOVWF AARGB3
RLF SIGN,W
while i < 8
BTFSC BARGB1,i
GOTO SM1616NA#v(i)
BCF AARGB2,7-i
variable i = i + 1
endw
variable i = 8
while i < 15
BTFSC BARGB0,i-8
GOTO SM1616NA#v(i)
BCF AARGB3,15-i
variable i =i + 1
endw
SM1616NA0
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
variable i = 1
while i < 8
BTFSS BARGB1,i
GOTO SM1616NA#v(i)
SM1616A#v(i) MOVF TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
SM1616NA#v(i)
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
variable i = i + 1
endw
variable i = 8
while i < 15
BTFSS BARGB0,i-8
GOTO SM1616NA#v(i)
SM1616A#v(i) MOVF TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
SM1616NA#v(i)
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
variable i = i + 1
endw
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
endm
UMUL1616 macro
while i < 8
BTFSC BARGB1,i
GOTO UM1616NA#v(i)
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSC BARGB0,i-8
GOTO UM1616NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 8
BTFSS BARGB1,i
GOTO UM1616NA#v(i)
UM1616A#v(i) MOVF TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM1616NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
variable i = i + 1
endw
variable i = 8
while i < 16
BTFSS BARGB0,i-8
GOTO UM1616NA#v(i)
UM1616A#v(i) MOVF TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM1616NA#v(i) RRF AARGB0, F
RRF AARGB1, F
variable i = i + 1
endw
endm
UMUL1515 macro
variable i = 0
while i < 8
BTFSC BARGB1,i
GOTO UM1515NA#v(i)
variable i = i + 1
endw
variable i = 8
while i < 15
BTFSC BARGB0,i-8
GOTO UM1515NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 8
BTFSS BARGB1,i
GOTO UM1515NA#v(i)
UM1515A#v(i) MOVF TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM1515NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
variable i = i + 1
endw
variable i = 8
while i < 15
BTFSS BARGB0,i-8
GOTO UM1515NA#v(i)
UM1515A#v(i) MOVF TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM1515NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
variable i = i + 1
endw
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
RRF AARGB3, F
endm
;**********************************************************************************************
;**********************************************************************************************
MOVF AARGB0,W
XORWF BARGB0,W
MOVWF TEMPB0
BTFSC TEMPB0,MSB
BTFSS BARGB0,MSB
GOTO M1616SOK
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB1, F
BTFSC _Z
INCF BARGB0, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
BTFSC BARGB0,MSB
GOTO M1616SX
SMUL1616L
RETLW 0x00
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
FXM1616U
CLRF AARGB2 ; clear partial product
CLRF AARGB3
MOVF AARGB0,W
MOVWF TEMPB0
MOVF AARGB1,W
MOVWF TEMPB1
UMUL1616L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
FXM1515U
CLRF AARGB2 ; clear partial product
CLRF AARGB3
MOVF AARGB0,W
MOVWF TEMPB0
MOVF AARGB1,W
MOVWF TEMPB1
UMUL1515L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
; $Revision: 2.3 $
;**********************************************************************************************
;**********************************************************************************************
SMUL1608L macro
; PM: 29 DM: 7
MOVLW 0x07
MOVWF LOOPCOUNT
LOOPSM1608A
RRF BARGB0, F
BTFSC _C
GOTO LSM1608NA
DECFSZ LOOPCOUNT, F
GOTO LOOPSM1608A
CLRF AARGB0
CLRF AARGB1
RETLW 0x00
LOOPSM1608
RRF BARGB0, F
BTFSS _C
GOTO LSM1608NA
MOVF TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
RLF SIGN,W
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
endm
UMUL1608L macro
; PM: 26 DM: 7
MOVLW 0x08
MOVWF LOOPCOUNT
LOOPUM1608A
RRF BARGB0, F
BTFSC _C
GOTO LUM1608NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM1608A
CLRF AARGB0
CLRF AARGB1
RETLW 0x00
LUM1608NAP
BCF _C
GOTO LUM1608NA
LOOPUM1608
RRF BARGB0, F
BTFSS _C
GOTO LUM1608NA
MOVF TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
LUM1608NA RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
DECFSZ LOOPCOUNT, F
GOTO LOOPUM1608
endm
UMUL1507L macro
; PM: 29 DM: 7
MOVLW 0x07
MOVWF LOOPCOUNT
LOOPUM1507A
RRF BARGB0, F
BTFSC _C
GOTO LUM1507NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM1507A
CLRF AARGB0
CLRF AARGB1
RETLW 0x00
LUM1507NAP
BCF _C
GOTO LUM1507NA
LOOPUM1507
RRF BARGB0, F
BTFSS _C
GOTO LUM1507NA
MOVF TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
LUM1507NA RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
DECFSZ LOOPCOUNT, F
GOTO LOOPUM1507
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
endm
SMUL1608 macro
variable i =0
BTFSC SIGN,MSB
COMF AARGB2, F
RLF SIGN,W
while i < 7
BTFSC BARGB0,i
GOTO SM1608NA#v(i)
BCF AARGB2,7-i
variable i = i + 1
endw
SM1608NA0
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
variable i = 1
while i < 7
BTFSS BARGB0,i
GOTO SM1608NA#v(i)
SM1608A#v(i) MOVF TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
SM1608NA#v(i)
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
variable i = i + 1
endw
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
endm
UMUL1608 macro
variable i = 0
while i < 8
BTFSC BARGB0,i
GOTO UM1608NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 8
BTFSS BARGB0,i
GOTO UM1608NA#v(i)
UM1608A#v(i) MOVF TEMPB1,W
ADDWF AARGB1, F
MOVF TEMPB0,W
BTFSC _C
INCFSZ TEMPB0,W
ADDWF AARGB0, F
UM1608NA#v(i) RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
variable i = i + 1
endw
endm
UMUL1507 macro
variable i = 0
while i < 7
BTFSC BARGB0,i
GOTO UM1507NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 7
BTFSS BARGB0,i
GOTO UM1507NA#v(i)
UM1507A#v(i) MOVF TEMPB1,W
ADDWF AARGB1, F
variable i = i + 1
endw
RRF AARGB0, F
RRF AARGB1, F
RRF AARGB2, F
endm
;**********************************************************************************************
;**********************************************************************************************
MOVF AARGB0,W
XORWF BARGB0,W
MOVWF TEMPB0
BTFSC TEMPB0,MSB
COMF SIGN,F
BTFSS BARGB0,MSB
GOTO M1608SOK
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
BTFSC BARGB0,MSB
GOTO M1608SX
SMUL1608
RETLW 0x00
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UMUL1608L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UMUL1507
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
; $Revision: 2.3 $
;**********************************************************************************************
;**********************************************************************************************
SMUL0808L macro
; PM: 21 DM: 5
MOVLW 0x07
MOVWF LOOPCOUNT
MOVF AARGB0,W
LOOPSM0808A
RRF BARGB0, F
BTFSC _C
GOTO LSM0808NA
DECFSZ LOOPCOUNT, F
GOTO LOOPSM0808A
CLRF AARGB0
RETLW 0x00
LOOPSM0808
RRF BARGB0, F
BTFSC _C
ADDWF AARGB0, F
LSM0808NA RLF SIGN, F
RRF AARGB0, F
RRF AARGB1, F
DECFSZ LOOPCOUNT, F
RLF SIGN, F
RRF AARGB0, F
RRF AARGB1, F
endm
UMUL0808L macro
; PM: 19 DM: 4
MOVLW 0x08
MOVWF LOOPCOUNT
MOVF AARGB0,W
LOOPUM0808A
RRF BARGB0, F
BTFSC _C
GOTO LUM0808NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM0808A
CLRF AARGB0
RETLW 0x00
LUM0808NAP
BCF _C
GOTO LUM0808NA
LOOPUM0808
RRF BARGB0, F
BTFSC _C
ADDWF AARGB0, F
LUM0808NA RRF AARGB0, F
RRF AARGB1, F
DECFSZ LOOPCOUNT, F
GOTO LOOPUM0808
endm
UMUL0707L macro
; PM: 21 DM: 4
MOVLW 0x07
MOVWF LOOPCOUNT
MOVF AARGB0,W
LOOPUM0707A
RRF BARGB0, F
BTFSC _C
GOTO LUM0707NAP
DECFSZ LOOPCOUNT, F
GOTO LOOPUM0707A
CLRF AARGB0
RETLW 0x00
LUM0707NAP
BCF _C
GOTO LUM0707NA
LOOPUM0707
RRF BARGB0, F
BTFSC _C
ADDWF AARGB0, F
LUM0707NA RRF AARGB0, F
RRF AARGB1, F
DECFSZ LOOPCOUNT, F
GOTO LOOPUM0707
RRF AARGB0, F
RRF AARGB1, F
endm
SMUL0808 macro
variable i = 0
MOVF AARGB0,W
while i < 7
BTFSC BARGB0,i
GOTO SM0808NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 7
BTFSC BARGB0,i
ADDWF AARGB0
SM0808NA#v(i) RLF SIGN
RRF AARGB0
RRF AARGB1
variable i = i + 1
endw
endm
UMUL0808 macro
variable i = 0
while i < 8
BTFSC BARGB0,i
GOTO UM0808NA#v(i)
variable i = i + 1
endw
variable i = 1
while i < 8
BTFSC BARGB0,i
ADDWF AARGB0, F
UM0808NA#v(i) RRF AARGB0, F
RRF AARGB1, F
variable i = i + 1
endw
endm
UMUL0707 macro
variable i = 0
while i < 7
variable i = i + 1
endw
variable i = 1
while i < 7
BTFSC BARGB0,i
ADDWF AARGB0, F
UM0707NA#v(i) RRF AARGB0, F
RRF AARGB1, F
variable i = i + 1
endw
RRF AARGB0, F
RRF AARGB1, F
endm
;**********************************************************************************************
;**********************************************************************************************
XORWF BARGB0,W
MOVWF TEMPB3
BTFSC TEMPB3,MSB
COMF SIGN, F
BTFSS BARGB0,MSB
BTFSC BARGB0,MSB
GOTO M0808SX
M0808SOK
SMUL0808L
RETLW 0x00
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UMUL0808L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UMUL0707L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
; $Revision: 2.4 $
SDIV3232L macro
MOVF BARGB3,W
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK22LA
DECFSZ LOOPCOUNT, F
GOTO LOOPS3232A
RLF AARGB1,W
RLF REMB3, F
RLF REMB2, F
RLF REMB1, F
RLF REMB0, F
MOVF BARGB3,W
BTFSS AARGB0,LSB
GOTO SADD22L8
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK22LB
DECFSZ LOOPCOUNT, F
GOTO LOOPS3232B
RLF AARGB2,W
RLF REMB3, F
RLF REMB2, F
RLF REMB1, F
RLF REMB0, F
MOVF BARGB3,W
BTFSS AARGB1,LSB
GOTO SADD22L16
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK22L16
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
DECFSZ LOOPCOUNT, F
GOTO LOOPS3232C
RLF AARGB3,W
RLF REMB3, F
RLF REMB2, F
RLF REMB1, F
RLF REMB0, F
MOVF BARGB3,W
BTFSS AARGB2,LSB
GOTO SADD22L24
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK22L24
MOVLW 7
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK22LD
INCFSZ BARGB0,W
ADDWF REMB0, F
DECFSZ LOOPCOUNT, F
GOTO LOOPS3232D
BTFSC AARGB3,LSB
GOTO SOK22L
MOVF BARGB3,W
ADDWF REMB3, F
MOVF BARGB2,W
BTFSC _C
INCFSZ BARGB2,W
ADDWF REMB2, F
MOVF BARGB1,W
BTFSC _C
INCFSZ BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
SOK22L
endm
CLRF TEMP
RLF AARGB0,W
RLF REMB3, F
MOVF BARGB3,W
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
RLF AARGB0, F
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK22LA
DECFSZ LOOPCOUNT, F
GOTO LOOPU3232A
RLF AARGB1,W
RLF REMB3, F
RLF REMB2, F
RLF REMB1, F
RLF REMB0, F
RLF TEMP, F
MOVF BARGB3,W
BTFSS AARGB0,LSB
GOTO UADD22L8
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK22L8
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK22LB
DECFSZ LOOPCOUNT, F
GOTO LOOPU3232B
RLF AARGB2,W
RLF REMB3, F
RLF REMB2, F
RLF REMB1, F
RLF REMB0, F
RLF TEMP, F
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK22L16
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
DECFSZ LOOPCOUNT, F
GOTO LOOPU3232C
RLF AARGB3,W
RLF REMB3, F
RLF REMB2, F
RLF REMB1, F
RLF REMB0, F
RLF TEMP, F
MOVF BARGB3,W
BTFSS AARGB2,LSB
GOTO UADD22L24
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK22L24
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK22LD
DECFSZ LOOPCOUNT, F
GOTO LOOPU3232D
BTFSC AARGB3,LSB
GOTO UOK22L
MOVF BARGB3,W
ADDWF REMB3, F
MOVF BARGB2,W
BTFSC _C
INCFSZ BARGB2,W
ADDWF REMB2, F
MOVF BARGB1,W
BTFSC _C
INCFSZ BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
UOK22L
endm
UDIV3131L macro
MOVF BARGB3,W
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
DECFSZ LOOPCOUNT, F
GOTO LOOPU3131A
RLF AARGB1,W
RLF REMB3, F
RLF REMB2, F
RLF REMB1, F
RLF REMB0, F
MOVF BARGB3,W
BTFSS AARGB0,LSB
GOTO UADD11L8
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK11L8
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK11LB
DECFSZ LOOPCOUNT, F
GOTO LOOPU3131B
RLF AARGB2,W
RLF REMB3, F
RLF REMB2, F
RLF REMB1, F
RLF REMB0, F
MOVF BARGB3,W
BTFSS AARGB1,LSB
GOTO UADD11L16
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK11LC
RLF AARGB3,W
RLF REMB3, F
RLF REMB2, F
RLF REMB1, F
RLF REMB0, F
MOVF BARGB3,W
BTFSS AARGB2,LSB
GOTO UADD11L24
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK11L24
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB3, F
MOVF BARGB2,W
BTFSS _C
INCFSZ BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
ADDWF REMB0, F
DECFSZ LOOPCOUNT, F
GOTO LOOPU3131D
BTFSC AARGB3,LSB
GOTO UOK11L
MOVF BARGB3,W
ADDWF REMB3, F
MOVF BARGB2,W
BTFSC _C
INCFSZ BARGB2,W
ADDWF REMB2, F
MOVF BARGB1,W
BTFSC _C
INCFSZ BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
UOK11L
endm
;**********************************************************************************************
;**********************************************************************************************
MOVF AARGB0,W
XORWF BARGB0,W
MOVWF TEMP
BTFSC TEMP,MSB
COMF SIGN,F
COMF BARGB3, F
COMF BARGB2, F
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB3, F
BTFSC _Z
INCF BARGB2, F
BTFSC _Z
INCF BARGB1, F
BTFSC _Z
INCF BARGB0, F
COMF AARGB3, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB3, F
BTFSC _Z
INCF AARGB2, F
BTFSC _Z
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
C3232S SDIV3232L
COMF AARGB3, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB3, F
BTFSC _Z
INCF AARGB2, F
BTFSC _Z
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
COMF REMB3, F
COMF REMB2, F
COMF REMB1, F
COMF REMB0, F
INCF REMB3, F
BTFSC _Z
INCF REMB2, F
BTFSC _Z
INCF REMB1, F
BTFSC _Z
INCF REMB0, F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV3232L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV3131L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
; $Revision: 2.3 $
;**********************************************************************************************
;**********************************************************************************************
SDIV3224L macro
MOVF BARGB2,W
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0,F
RLF AARGB0,F
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
DECFSZ LOOPCOUNT,F
GOTO LOOPS3224A
RLF AARGB1,W
RLF REMB2,F
RLF REMB1,F
RLF REMB0,F
MOVF BARGB2,W
BTFSS AARGB0,LSB
GOTO SADD24L8
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0,F
GOTO SOK24L8
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2,F
DECFSZ LOOPCOUNT,F
GOTO LOOPS3224B
RLF AARGB2,W
RLF REMB2,F
RLF REMB1,F
RLF REMB0,F
MOVF BARGB2,W
BTFSS AARGB1,LSB
GOTO SADD24L16
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0,F
GOTO SOK24L16
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0,F
GOTO SOK24LC
DECFSZ LOOPCOUNT,F
GOTO LOOPS3224C
RLF AARGB3,W
RLF REMB2,F
RLF REMB1,F
RLF REMB0,F
MOVF BARGB2,W
BTFSS AARGB2,LSB
GOTO SADD24L24
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0,F
GOTO SOK24L24
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0,F
GOTO SOK24LD
DECFSZ LOOPCOUNT,F
GOTO LOOPS3224D
BTFSC AARGB3,LSB
GOTO SOK24L
MOVF BARGB2,W
ADDWF REMB2,F
MOVF BARGB1,W
BTFSC _C
INCFSZ BARGB1,W
ADDWF REMB1,F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0,F
SOK24L
endm
UDIV3224L macro
CLRF TEMP
RLF AARGB0,W
RLF REMB2,F
MOVF BARGB2,W
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP,F
RLF AARGB0,F
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0,F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP,F
GOTO UOK24LA
DECFSZ LOOPCOUNT,F
GOTO LOOPU3224A
RLF AARGB1,W
RLF REMB2,F
RLF REMB1,F
RLF REMB0,F
RLF TEMP,F
MOVF BARGB2,W
BTFSS AARGB0,LSB
GOTO UADD24L8
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0,F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP,F
GOTO UOK24LB
DECFSZ LOOPCOUNT,F
GOTO LOOPU3224B
RLF AARGB2,W
RLF REMB2,F
RLF REMB1,F
RLF REMB0,F
RLF TEMP,F
MOVF BARGB2,W
BTFSS AARGB1,LSB
GOTO UADD24L16
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0,F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP,F
GOTO UOK24L16
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
DECFSZ LOOPCOUNT,F
GOTO LOOPU3224C
RLF AARGB3,W
RLF REMB2,F
RLF REMB1,F
RLF REMB0,F
RLF TEMP,F
MOVF BARGB2,W
BTFSS AARGB2,LSB
GOTO UADD24L24
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0,F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP,F
GOTO UOK24L24
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0,F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP,F
GOTO UOK24LD
DECFSZ LOOPCOUNT,F
GOTO LOOPU3224D
BTFSC AARGB3,LSB
GOTO UOK24L
MOVF BARGB2,W
ADDWF REMB2,F
MOVF BARGB1,W
BTFSC _C
INCFSZ BARGB1,W
ADDWF REMB1,F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0,F
UOK24L
endm
UDIV3123L macro
MOVF BARGB2,W
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0,F
RLF AARGB0,F
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0,F
GOTO UOK13LA
DECFSZ LOOPCOUNT,F
GOTO LOOPU3123A
RLF AARGB1,W
RLF REMB2,F
RLF REMB1,F
RLF REMB0,F
MOVF BARGB2,W
BTFSS AARGB0,LSB
GOTO UADD13L8
SUBWF REMB2,F
MOVF BARGB1,W
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0,F
GOTO UOK13LB
DECFSZ LOOPCOUNT,F
GOTO LOOPU3123B
RLF AARGB2,W
RLF REMB2,F
RLF REMB1,F
RLF REMB0,F
MOVF BARGB2,W
BTFSS AARGB1,LSB
GOTO UADD13L16
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0,F
GOTO UOK13LC
DECFSZ LOOPCOUNT,F
GOTO LOOPU3123C
RLF AARGB3,W
RLF REMB2,F
RLF REMB1,F
RLF REMB0,F
MOVF BARGB2,W
BTFSS AARGB2,LSB
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0,F
GOTO UOK13L24
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2,F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1,F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0,F
GOTO UOK13LD
DECFSZ LOOPCOUNT,F
GOTO LOOPU3123D
BTFSC AARGB3,LSB
GOTO UOK13L
MOVF BARGB2,W
ADDWF REMB2,F
endm
;**********************************************************************************************
;**********************************************************************************************
MOVF AARGB0,W
XORWF BARGB0,W
MOVWF TEMP
BTFSC TEMP,MSB
COMF SIGN,F
COMF BARGB2, F
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB2, F
COMF AARGB3, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB3, F
BTFSC _Z
INCF AARGB2, F
BTFSC _Z
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
C3224S SDIV3224L
COMF AARGB3, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB3, F
BTFSC _Z
INCF AARGB2, F
BTFSC _Z
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
COMF REMB2, F
COMF REMB1, F
COMF REMB0, F
INCF REMB2, F
BTFSC _Z
INCF REMB1, F
BTFSC _Z
INCF REMB0, F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV3224L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV3123L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
END
; $Revision: 2.3 $
SDIV3216L macro
MOVF BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK26LA
DECFSZ LOOPCOUNT, F
GOTO LOOPS3216A
RLF AARGB1,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
BTFSS AARGB0,LSB
GOTO SADD26L8
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK26L8
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK26LB
DECFSZ LOOPCOUNT, F
GOTO LOOPS3216B
RLF AARGB2,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
BTFSS AARGB1,LSB
GOTO SADD26L16
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK26LC
DECFSZ LOOPCOUNT, F
GOTO LOOPS3216C
RLF AARGB3,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
BTFSS AARGB2,LSB
GOTO SADD26L24
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK26L24
MOVLW 7
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK26LD
DECFSZ LOOPCOUNT, F
GOTO LOOPS3216D
BTFSC AARGB3,LSB
GOTO SOK26L
MOVF BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
SOK26L
endm
UDIV3216L macro
CLRF TEMP
RLF AARGB0,W
RLF REMB1, F
MOVF BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
RLF AARGB0, F
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK26LA
DECFSZ LOOPCOUNT, F
GOTO LOOPU3216A
RLF AARGB1,W
RLF REMB1, F
RLF REMB0, F
RLF TEMP, F
MOVF BARGB1,W
BTFSS AARGB0,LSB
GOTO UADD26L8
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK26L8
MOVLW 7
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK26LB
DECFSZ LOOPCOUNT, F
GOTO LOOPU3216B
RLF AARGB2,W
RLF REMB1, F
RLF REMB0, F
RLF TEMP, F
MOVF BARGB1,W
BTFSS AARGB1,LSB
GOTO UADD26L16
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK26L16
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK26LC
DECFSZ LOOPCOUNT, F
GOTO LOOPU3216C
RLF AARGB3,W
RLF REMB1, F
RLF REMB0, F
RLF TEMP, F
MOVF BARGB1,W
BTFSS AARGB2,LSB
GOTO UADD26L24
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK26L24
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK26LD
DECFSZ LOOPCOUNT, F
GOTO LOOPU3216D
BTFSC AARGB3,LSB
GOTO UOK26L
MOVF BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
UOK26L
endm
UDIV3115L macro
MOVF BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK15LA
DECFSZ LOOPCOUNT, F
GOTO LOOPU3115A
RLF AARGB1,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
BTFSS AARGB0,LSB
GOTO UADD15L8
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK15L8
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
DECFSZ LOOPCOUNT, F
GOTO LOOPU3115B
RLF AARGB2,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
BTFSS AARGB1,LSB
GOTO UADD15L16
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK15L16
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK15LC
DECFSZ LOOPCOUNT, F
GOTO LOOPU3115C
RLF AARGB3,W
RLF REMB1, F
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK15L24
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK15LD
DECFSZ LOOPCOUNT, F
GOTO LOOPU3115D
BTFSC AARGB3,LSB
GOTO UOK15L
MOVF BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
UOK15L
endm
;**********************************************************************************************
;**********************************************************************************************
MOVF AARGB0,W
XORWF BARGB0,W
MOVWF TEMP
BTFSC TEMP,MSB
COMF SIGN,F
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB1, F
BTFSC _Z
INCF BARGB0, F
COMF AARGB3, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB3, F
BTFSC _Z
INCF AARGB2, F
BTFSC _Z
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
C3216S SDIV3216L
COMF AARGB3, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB3, F
BTFSC _Z
INCF AARGB2, F
BTFSC _Z
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
COMF REMB1, F
COMF REMB0, F
INCF REMB1, F
BTFSC _Z
INCF REMB0, F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV3216L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV3115L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
; $Revision: 2.3 $
SDIV2424L macro
MOVF BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
DECFSZ LOOPCOUNT, F
GOTO LOOPS2424A
RLF AARGB1,W
RLF REMB2, F
RLF REMB1, F
RLF REMB0, F
MOVF BARGB2,W
BTFSS AARGB0,LSB
GOTO SADD44L8
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK44L8
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2, F
MOVF BARGB1,W
DECFSZ LOOPCOUNT, F
GOTO LOOPS2424B
RLF AARGB2,W
RLF REMB2, F
RLF REMB1, F
RLF REMB0, F
MOVF BARGB2,W
BTFSS AARGB1,LSB
GOTO SADD44L16
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK44L16
MOVLW 7
MOVWF LOOPCOUNT
DECFSZ LOOPCOUNT, F
GOTO LOOPS2424C
BTFSC AARGB2,LSB
GOTO SOK44L
MOVF BARGB2,W
ADDWF REMB2, F
MOVF BARGB1,W
BTFSC _C
INCFSZ BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
SOK44L
endm
UDIV2424L macro
CLRF TEMP
RLF AARGB0,W
RLF REMB2, F
MOVF BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK44LA
DECFSZ LOOPCOUNT, F
GOTO LOOPU2424A
RLF AARGB1,W
RLF REMB2, F
RLF REMB1, F
RLF REMB0, F
RLF TEMP, F
MOVF BARGB2,W
BTFSS AARGB0,LSB
GOTO UADD44L8
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK44LB
DECFSZ LOOPCOUNT, F
GOTO LOOPU2424B
RLF AARGB2,W
RLF REMB2, F
RLF REMB1, F
RLF REMB0, F
RLF TEMP, F
MOVF BARGB2,W
BTFSS AARGB1,LSB
GOTO UADD44L16
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK44L16
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
DECFSZ LOOPCOUNT, F
GOTO LOOPU2424C
BTFSC AARGB2,LSB
GOTO UOK44L
MOVF BARGB2,W
ADDWF REMB2, F
MOVF BARGB1,W
BTFSC _C
INCFSZ BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
UOK44L
endm
UDIV2323L macro
MOVF BARGB2,W
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK33LA
DECFSZ LOOPCOUNT, F
GOTO LOOPU2323A
RLF AARGB1,W
RLF REMB2, F
RLF REMB1, F
RLF REMB0, F
MOVF BARGB2,W
BTFSS AARGB0,LSB
GOTO UADD33L8
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK33L8
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK33LB
DECFSZ LOOPCOUNT, F
GOTO LOOPU2323B
RLF AARGB2,W
RLF REMB2, F
RLF REMB1, F
RLF REMB0, F
MOVF BARGB2,W
BTFSS AARGB1,LSB
GOTO UADD33L16
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK33L16
SUBWF REMB2, F
MOVF BARGB1,W
BTFSS _C
INCFSZ BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK33LC
DECFSZ LOOPCOUNT, F
GOTO LOOPU2323C
BTFSC AARGB2,LSB
GOTO UOK33L
MOVF BARGB2,W
ADDWF REMB2, F
MOVF BARGB1,W
BTFSC _C
INCFSZ BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
UOK33L
endm
;**********************************************************************************************
;**********************************************************************************************
MOVF AARGB0,W
XORWF BARGB0,W
MOVWF TEMP
BTFSC TEMP,MSB
COMF SIGN,F
COMF BARGB2, F
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB2, F
BTFSC _Z
INCF BARGB1, F
BTFSC _Z
INCF BARGB0, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB2, F
BTFSC _Z
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
C2424S SDIV2424L
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB2, F
BTFSC _Z
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
COMF REMB2, F
COMF REMB1, F
COMF REMB0, F
INCF REMB2, F
BTFSC _Z
INCF REMB1, F
BTFSC _Z
INCF REMB0, F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV2424L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV2323L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
END
; $Revision: 2.3 $
;**********************************************************************************************
;**********************************************************************************************
SDIV2416L macro
MOVF BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK46LA
DECFSZ LOOPCOUNT, F
GOTO LOOPS2416A
RLF AARGB1,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
BTFSS AARGB0,LSB
GOTO SADD46L8
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK46L8
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK46LB
DECFSZ LOOPCOUNT, F
GOTO LOOPS2416B
RLF AARGB2,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
BTFSS AARGB1,LSB
GOTO SADD46L16
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK46LC
DECFSZ LOOPCOUNT, F
GOTO LOOPS2416C
BTFSC AARGB2,LSB
GOTO SOK46L
MOVF BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
SOK46L
endm
UDIV2416L macro
CLRF TEMP
RLF AARGB0,W
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
RLF AARGB0, F
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK46LA
DECFSZ LOOPCOUNT, F
GOTO LOOPU2416A
RLF AARGB1,W
RLF REMB1, F
RLF REMB0, F
RLF TEMP, F
MOVF BARGB1,W
BTFSS AARGB0,LSB
GOTO UADD46L8
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK46LB
DECFSZ LOOPCOUNT, F
GOTO LOOPU2416B
RLF AARGB2,W
RLF REMB1, F
RLF REMB0, F
RLF TEMP, F
MOVF BARGB1,W
BTFSS AARGB1,LSB
GOTO UADD46L16
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
CLRW
BTFSS _C
MOVLW 1
SUBWF TEMP, F
GOTO UOK46LC
DECFSZ LOOPCOUNT, F
GOTO LOOPU2416C
BTFSC AARGB2,LSB
GOTO UOK46L
MOVF BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
UOK46L
UDIV2315L macro
MOVF BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK35LA
DECFSZ LOOPCOUNT, F
GOTO LOOPU2315A
RLF AARGB1,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
BTFSS AARGB0,LSB
GOTO UADD35L8
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK35L8
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK35LB
DECFSZ LOOPCOUNT, F
GOTO LOOPU2315B
RLF AARGB2,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
BTFSS AARGB1,LSB
GOTO UADD35L16
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK35L16
MOVLW 7
MOVWF LOOPCOUNT
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
DECFSZ LOOPCOUNT, F
GOTO LOOPU2315C
BTFSC AARGB2,LSB
GOTO UOK35L
MOVF BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
UOK35L
endm
;**********************************************************************************************
;**********************************************************************************************
MOVF AARGB0,W
XORWF BARGB0,W
MOVWF TEMP
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB1, F
BTFSC _Z
INCF BARGB0, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB2, F
BTFSC _Z
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
C2416S SDIV2416L
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB2, F
BTFSC _Z
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
COMF REMB1, F
COMF REMB0, F
INCF REMB1, F
BTFSC _Z
INCF REMB0, F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV2416L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV2315L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
END
; $Revision: 2.4 $
;**********************************************************************************************
;**********************************************************************************************
SDIV1616L macro
; PM: 42 DM: 7
RLF AARGB0,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
RLF AARGB1, F
RLF AARGB0, F
MOVLW D’15’
MOVWF LOOPCOUNT
BTFSS AARGB1,LSB
GOTO SADD66L
DECFSZ LOOPCOUNT, F
GOTO LOOPS1616
BTFSC AARGB1,LSB
GOTO SOK66L
MOVF BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
SOK66L
endm
UDIV1616L macro
; PM: 24 DM: 7
MOVLW D’16’
MOVWF LOOPCOUNT
BTFSC _C
GOTO UOK66LL
MOVF BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
BCF _C
DECFSZ LOOPCOUNT, F
GOTO LOOPU1616
endm
UDIV1515L macro
; PM: 42 DM: 7
RLF AARGB0,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
RLF AARGB1, F
RLF AARGB0, F
MOVLW D’15’
MOVWF LOOPCOUNT
BTFSS AARGB1,LSB
GOTO UADD55L
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK55LL
DECFSZ LOOPCOUNT, F
GOTO LOOPU1515
BTFSC AARGB1,LSB
GOTO UOK55L
MOVF BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
UOK55L
endm
SDIV1616 macro
variable i
MOVF BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
RLF AARGB0,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
RLF AARGB0, F
variable i = 2
while i < 8
RLF AARGB0,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
BTFSS AARGB0,LSB
GOTO SADD66#v(i)
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK66#v(i)
variable i = i + 1
endw
RLF AARGB1,W
RLF REMB1, F
RLF REMB0, F
BTFSS AARGB0,LSB
GOTO SADD668
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK668
variable i = 9
while i < 16
RLF AARGB1,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
BTFSS AARGB1,LSB
GOTO SADD66#v(i)
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO SOK66#v(i)
variable i = i + 1
endw
BTFSC AARGB1,LSB
GOTO SOK66
MOVF BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
SOK66
endm
UDIV1616 macro
variable i
variable i = 0
while i < 16
RLF AARGB0,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
BTFSC _C
GOTO UOK66#v(i)
MOVF BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
BCF _C
variable i = i + 1
endw
endm
UDIV1515 macro
variable i
MOVF BARGB1,W
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
RLF AARGB0,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
variable i = 2
while i < 8
RLF AARGB0,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
BTFSS AARGB0,LSB
GOTO UADD55#v(i)
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK55#v(i)
variable i = i + 1
endw
RLF AARGB1,W
RLF REMB1, F
RLF REMB0, F
MOVF BARGB1,W
BTFSS AARGB0,LSB
GOTO UADD558
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK558
variable i = 9
while i < 16
RLF AARGB1,W
BTFSS AARGB1,LSB
GOTO UADD55#v(i)
SUBWF REMB1, F
MOVF BARGB0,W
BTFSS _C
INCFSZ BARGB0,W
SUBWF REMB0, F
GOTO UOK55#v(i)
variable i = i + 1
endw
BTFSC AARGB1,LSB
GOTO UOK55
MOVF BARGB1,W
ADDWF REMB1, F
MOVF BARGB0,W
BTFSC _C
INCFSZ BARGB0,W
ADDWF REMB0, F
UOK55
endm
;**********************************************************************************************
;**********************************************************************************************
MOVF AARGB0,W
XORWF BARGB0,W
MOVWF TEMP
BTFSC TEMP,MSB
COMF SIGN,F
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB1, F
BTFSC _Z
INCF BARGB0, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
C1616S SDIV1616L
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
COMF REMB1, F
COMF REMB0, F
INCF REMB1, F
BTFSC _Z
INCF REMB0, F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV1616L
RETLW 0x00
UDIV1515L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
; $Revision: 2.3 $
;**********************************************************************************************
;**********************************************************************************************
SDIV1608L macro
; PM: 42 DM: 5
MOVF BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
ADDWF REMB0, F
RLF AARGB0, F
MOVLW 6
MOVWF LOOPCOUNT
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
DECFSZ LOOPCOUNT, F
GOTO LOOPS1608A
RLF AARGB1,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLF AARGB1, F
MOVLW 7
MOVWF LOOPCOUNT
BTFSC AARGB1,LSB
SUBWF REMB0, F
BTFSS AARGB1,LSB
ADDWF REMB0, F
RLF AARGB1, F
DECFSZ LOOPCOUNT, F
GOTO LOOPS1608B
BTFSS AARGB1,LSB
ADDWF REMB0, F
endm
UDIV1608L macro
; PM: 39 DM: 7
MOVLW 8
MOVWF LOOPCOUNT
BTFSC _C
GOTO UOK68A
ADDWF REMB0, F
BCF _C
UOK68A RLF AARGB0, F
DECFSZ LOOPCOUNT, F
GOTO LOOPU1608A
CLRF TEMP
MOVLW 8
MOVWF LOOPCOUNT
BTFSC _C
GOTO UOK68B
MOVF BARGB0,W
ADDWF REMB0, F
CLRF AARGB5
CLRW
BTFSC _C
INCFSZ AARGB5,W
ADDWF TEMP, F
BCF _C
UOK68B RLF AARGB1, F
DECFSZ LOOPCOUNT, F
GOTO LOOPU1608B
endm
UDIV1607L macro
; PM: 39 DM: 5
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
MOVLW 7
MOVWF LOOPCOUNT
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLF AARGB0, F
DECFSZ LOOPCOUNT, F
GOTO LOOPU1607A
RLF AARGB1,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB0,LSB
SUBWF REMB0, F
MOVLW 7
MOVWF LOOPCOUNT
BTFSC AARGB1,LSB
SUBWF REMB0, F
BTFSS AARGB1,LSB
ADDWF REMB0, F
RLF AARGB1, F
DECFSZ LOOPCOUNT, F
GOTO LOOPU1607B
BTFSS AARGB1,LSB
ADDWF REMB0, F
endm
UDIV1507L macro
; PM: 42 DM: 5
MOVF BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
ADDWF REMB0, F
RLF AARGB0, F
MOVLW 6
MOVWF LOOPCOUNT
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLF AARGB0, F
DECFSZ LOOPCOUNT, F
GOTO LOOPU1507A
RLF AARGB1,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
MOVLW 7
MOVWF LOOPCOUNT
BTFSC AARGB1,LSB
SUBWF REMB0, F
BTFSS AARGB1,LSB
ADDWF REMB0, F
RLF AARGB1, F
DECFSZ LOOPCOUNT, F
GOTO LOOPU1507B
BTFSS AARGB1,LSB
ADDWF REMB0, F
endm
SDIV1608 macro
MOVF BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
ADDWF REMB0, F
RLF AARGB0, F
variable i = 2
while i < 8
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLF AARGB0, F
variable i = i + 1
endw
RLF AARGB1,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB0,LSB
SUBWF REMB0, F
variable i = 9
while i < 16
RLF AARGB1,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB1,LSB
SUBWF REMB0, F
BTFSS AARGB1,LSB
ADDWF REMB0, F
RLF AARGB1, F
variable i = i + 1
endw
BTFSS AARGB1,LSB
ADDWF REMB0, F
endm
UDIV1608 macro
variable i = 0
while i < 8
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
SUBWF REMB0, F
BTFSC _C
GOTO UOK68#v(i)
ADDWF REMB0, F
BCF _C
UOK68#v(i) RLF AARGB0, F
variable i = i + 1
endw
CLRF TEMP
variable i = 8
while i < 16
RLF AARGB1,W
RLF REMB0, F
RLF TEMP, F
MOVF BARGB0,W
BTFSC _C
GOTO UOK68#v(i)
MOVF BARGB0,W
ADDWF REMB0, F
CLRF AARGB5
CLRW
BTFSC _C
INCFSZ AARGB5,W
ADDWF TEMP, F
BCF _C
UOK68#v(i) RLF AARGB1, F
variable i = i + 1
endw
endm
UDIV1607 macro
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
variable i = 1
while i < 8
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLF AARGB0, F
variable i = i + 1
endw
RLF AARGB1,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
variable i = 9
while i < 16
RLF AARGB1,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB1,LSB
SUBWF REMB0, F
BTFSS AARGB1,LSB
ADDWF REMB0, F
RLF AARGB1, F
variable i = i + 1
endw
BTFSS AARGB1,LSB
ADDWF REMB0, F
endm
UDIV1507 macro
MOVF BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
ADDWF REMB0, F
RLF AARGB0, F
variable i = 2
while i < 8
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLF AARGB0, F
variable i = i + 1
endw
RLF AARGB1,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB0,LSB
variable i = 9
while i < 16
RLF AARGB1,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB1,LSB
SUBWF REMB0, F
BTFSS AARGB1,LSB
ADDWF REMB0, F
RLF AARGB1, F
variable i = i + 1
endw
BTFSS AARGB1,LSB
ADDWF REMB0, F
endm
;**********************************************************************************************
;**********************************************************************************************
MOVF AARGB0,W
XORWF BARGB0,W
MOVWF TEMP
COMF BARGB0, F
INCF BARGB0, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
C1608S SDIV1608
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB1, F
BTFSC _Z
INCF AARGB0, F
COMF REMB0, F
INCF REMB0, F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV1608L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV1607L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV1507L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
END
; $Revision: 2.3 $
;**********************************************************************************************
;**********************************************************************************************
SDIV0808L macro
; PM: 22 DM: 4
MOVF BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
ADDWF REMB0, F
RLF AARGB0, F
MOVLW 6
MOVWF LOOPCOUNT
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
DECFSZ LOOPCOUNT, F
GOTO LOOPS0808A
BTFSS AARGB0,LSB
ADDWF REMB0, F
endm
UDIV0808L macro
; PM: 13 DM: 4
MOVLW 8
MOVWF LOOPCOUNT
BTFSC _C
GOTO UOK88A
ADDWF REMB0, F
BCF _C
UOK88A RLF AARGB0, F
DECFSZ LOOPCOUNT, F
GOTO LOOPU0808A
endm
UDIV0807L macro
; PM: 19 DM: 4
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
MOVLW 7
MOVWF LOOPCOUNT
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLF AARGB0, F
DECFSZ LOOPCOUNT, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
endm
UDIV0707L macro
; PM: 22 DM: 4
MOVF BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
ADDWF REMB0, F
RLF AARGB0, F
MOVLW 6
MOVWF LOOPCOUNT
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLF AARGB0, F
DECFSZ LOOPCOUNT, F
GOTO LOOPU0707
BTFSS AARGB0,LSB
ADDWF REMB0, F
endm
SDIV0808 macro
; PM: 58 DM: 3
variable i
MOVF BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
ADDWF REMB0, F
RLF AARGB0, F
while i < 8
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLF AARGB0, F
i= i + 1
endw
BTFSS AARGB0,LSB
ADDWF REMB0, F
endm
UDIV0808 macro
; PM: 72 DM: 3
variable i
i = 0
while i < 8
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
SUBWF REMB0, F
BTFSC _C
GOTO UOK88#v(i)
ADDWF REMB0, F
BCF _C
UOK88#v(i) RLF AARGB0, F
i= i + 1
endw
endm
UDIV0807 macro
; PM: 63 DM: 3
variable i
i = 1
while i < 8
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLF AARGB0, F
i= i + 1
endw
BTFSS AARGB0,LSB
ADDWF REMB0, F
endm
UDIV0707 macro
; PM: 58 DM: 3
variable i
MOVF BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
ADDWF REMB0, F
RLF AARGB0, F
i = 2
while i < 8
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLF AARGB0, F
i= i + 1
endw
BTFSS AARGB0,LSB
ADDWF REMB0, F
endm
;**********************************************************************************************
;**********************************************************************************************
XORWF BARGB0,W
MOVWF TEMP
BTFSC TEMP,MSB
COMF SIGN,F
COMF BARGB0, F
INCF BARGB0, F
COMF AARGB0, F
INCF AARGB0, F
C0808S SDIV0808L
COMF AARGB0, F
INCF AARGB0, F
COMF REMB0, F
INCF REMB0, F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV0808L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV0807L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV0707L
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
; $Revision: 2.2 $
;**********************************************************************************************
;**********************************************************************************************
;
; 8x8 Bit Unsigned Fixed Point Multiply 08 x 08 -> 16
;
; Input: 8 bit unsigned fixed point multiplicand in AARGB0
; 8 bit unsigned fixed point multiplier in BARGB0
;
; Use: CALL FXM0808U
;
; Output: 16 bit unsigned fixed point product in AARGB0, AARGB1
;
; Result: AARG <-- AARG * BARG
;
; Max Timing: 6 clks
;
; Min Timing: 6 clks
;
; PM: 5 DM: 3
;
FXM0808U MOVFP BARGB0,WREG
MULWF AARGB0
MOVPF PRODH,AARGB0
MOVPF PRODL,AARGB1
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 16x8 Bit Signed Fixed Point Multiply 16 x 08 -> 24
;
; Input: 16 bit signed fixed point multiplicand in AARGB0
; 8 bit signed fixed point multiplier in BARGB0
;
; Use: CALL FXM1608S
;
; Output: 24 bit signed fixed point product in AARGB0, AARGB1
;
; Result: AARG <-- AARG * BARG
;
; Max Timing: 21 clks
;
; Min Timing: 18 clks
;
; PM: 20 DM: 4
;
FXM1608S MOVFP BARGB0,WREG
MULWF AARGB1
MOVPF AARGB1,TEMP
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 16x8 Bit Unsigned Fixed Point Multiply 16 x 08 -> 24
;
; Input: 16 bit unsigned fixed point multiplicand in AARGB0
; 8 bit unsigned fixed point multiplier in BARGB0
;
; Use: CALL FXM1608U
;
; Output: 24 bit unsigned fixed point product in AARGB0, AARGB1, AARGB2
;
; Result: AARG <-- AARG * BARG
;
; Max Timing: 12 clks
;
; Min Timing: 12 clks
;
; PM: 11 DM: 4
;
FXM1608U MOVFP BARGB0,WREG
MULWF AARGB1
MOVPF PRODH,AARGB1
MOVPF PRODL,AARGB2
MULWF AARGB0
MOVPF PRODH,AARGB0
MOVPF PRODL,WREG
ADDWF AARGB1,F
CLRF WREG,F
ADDWFC AARGB0,F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 16x16 Bit Signed Fixed Point Multiply 16 x 16 -> 32
;
; Input: 16 bit signed fixed point multiplicand in AARGB0, AARGB1
; 16 bit signed fixed point multiplier in BARGB0, BARGB1
;
; Use: CALL FXM1616S
;
; Output: 32 bit signed fixed point product in AARGB0, AARGB1,
; AARGB2, AARGB3
;
MOVFP AARGB1,WREG
MULWF BARGB1
MOVPF PRODH,AARGB2
MOVPF PRODL,AARGB3
MOVFP AARGB0,WREG
MULWF BARGB0
MOVPF PRODH,AARGB0
MOVPF PRODL,AARGB1
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
CLRF WREG,F
ADDWFC AARGB0,F
MOVFP TEMPB1,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
CLRF WREG,F
ADDWFC AARGB0,F
BTFSS BARGB0,MSB
GOTO TSIGN1616A
MOVFP TEMPB1,WREG
SUBWF AARGB1,F
MOVFP TEMPB0,WREG
SUBWFB AARGB0,F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 16x16 Bit Unsigned Fixed Point Multiply 16 x 16 -> 32
;
; Input: 16 bit unsigned fixed point multiplicand in AARGB0, AARGB1
; 16 bit unsigned fixed point multiplier in BARGB0, BARGB1
;
; Use: CALL FXM1616U
;
; Output: 32 bit unsigned fixed point product in AARGB0, AARGB1,
; AARGB2, AARGB3
MOVFP AARGB1,WREG
MULWF BARGB1
MOVPF PRODH,AARGB2
MOVPF PRODL,AARGB3
MOVFP AARGB0,WREG
MULWF BARGB0
MOVPF PRODH,AARGB0
MOVPF PRODL,AARGB1
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
CLRF WREG,F
ADDWFC AARGB0,F
MOVFP TEMPB1,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
CLRF WREG,F
ADDWFC AARGB0,F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 24x16 Bit Signed Fixed Point Multiply 24 x 16 -> 40
;
; Input: 24 bit signed fixed point multiplicand in AARGB0, AARGB1, AARGB2
; 16 bit signed fixed point multiplier in BARGB0, BARGB1
;
; Use: CALL FXM2416S
;
; Output: 40 bit signed fixed point product in AARGB0, AARGB1,
; AARGB2, AARGB3, AARGB4
;
; Result: AARG <-- AARG * BARG
;
; Max Timing: 56 clks
;
; Min Timing: 46 clks
;
; PM: 55 DM: 10
;
FXM2416S MOVPF AARGB0,TEMPB0
MOVPF AARGB1,TEMPB1
MOVPF AARGB2,TEMPB2
MOVFP AARGB1,WREG
MULWF BARGB0
MOVPF PRODH,AARGB1
MOVPF PRODL,AARGB2
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
CLRF WREG,F
ADDWFC AARGB1,F
MOVFP TEMPB2,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
CLRF WREG,F
ADDWFC AARGB1,F
MOVFP AARGB0,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
MOVFP AARGB0,WREG
MULWF BARGB0
CLRF AARGB0,W
ADDWFC AARGB0,F
MOVPF PRODL,WREG
ADDWF AARGB1,F
MOVPF PRODH,WREG
ADDWFC AARGB0,F
BTFSS BARGB0,MSB
GOTO TSIGN2416A
MOVFP TEMPB2,WREG
SUBWF AARGB2,F
MOVFP TEMPB1,WREG
SUBWFB AARGB1,F
MOVFP TEMPB0,WREG
SUBWFB AARGB0,F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 24x16 Bit Unsigned Fixed Point Multiply 24 x 16 -> 40
;
; Input: 24 bit unsigned fixed point multiplicand in AARGB0, AARGB1, AARGB2
MOVFP AARGB2,WREG
MULWF BARGB1
MOVPF PRODH,AARGB3
MOVPF PRODL,AARGB4
MOVFP AARGB1,WREG
MULWF BARGB0
MOVPF PRODH,AARGB1
MOVPF PRODL,AARGB2
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
CLRF WREG,F
ADDWFC AARGB1,F
MOVFP TEMPB2,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
CLRF WREG,F
ADDWFC AARGB1,F
MOVFP AARGB0,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
MOVFP AARGB0,WREG
MULWF BARGB0
CLRF AARGB0,W
ADDWFC AARGB0,F
MOVPF PRODL,WREG
ADDWF AARGB1,F
MOVPF PRODH,WREG
ADDWFC AARGB0,F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 24x24 Bit Signed Fixed Point Multiply 24 x 24 -> 48
MOVFP AARGB2,WREG
MULWF BARGB2
MOVPF PRODH,AARGB4
MOVPF PRODL,AARGB5
MOVFP AARGB1,WREG
MULWF BARGB1
MOVPF PRODH,AARGB2
MOVPF PRODL,AARGB3
MULWF BARGB2
MOVPF PRODL,WREG
ADDWF AARGB4,F
MOVPF PRODH,WREG
ADDWFC AARGB3,F
CLRF WREG,F
ADDWFC AARGB2,F
MOVFP TEMPB2,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB4,F
MOVPF PRODH,WREG
ADDWFC AARGB3,F
CLRF WREG,F
ADDWFC AARGB2,F
MOVFP AARGB0,WREG
MULWF BARGB2
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
MOVFP AARGB0,WREG
MULWF BARGB1
CLRF AARGB1,W
ADDWFC AARGB1,F
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
MOVFP TEMPB2,WREG
MULWF BARGB0
MOVPF PRODL,WREG
MOVFP TEMPB1,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
CLRF WREG,F
ADDWFC AARGB0,F
MOVFP TEMPB0,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB1,F
MOVPF PRODH,WREG
ADDWFC AARGB0,F
BTFSS BARGB0,MSB
GOTO TSIGN2424A
MOVFP TEMPB2,WREG
SUBWF AARGB2,F
MOVFP TEMPB1,WREG
SUBWFB AARGB1,F
MOVFP TEMPB0,WREG
SUBWFB AARGB0,F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 24x24 Bit Unsigned Fixed Point Multiply 24 x 24 -> 48
;
; Input: 24 bit unsigned fixed point multiplicand in AARGB0, AARGB1, AARGB2
; 24 bit unsigned fixed point multiplier in BARGB0, BARGB1, BARGB2
;
; Use: CALL FXM2424U
;
; Output: 48 bit unsigned fixed point product in AARGB0, AARGB1,
; AARGB2, AARGB3, AARGB4, AARGB5
;
; Result: AARG <-- AARG * BARG
;
; Max Timing: 65 clks
;
; Min Timing: 65 clks
;
; PM: 64 DM: 12
;
;
FXM2424U MOVPF AARGB0,TEMPB0
MOVFP AARGB2,WREG
MULWF BARGB2
MOVPF PRODH,AARGB4
MOVPF PRODL,AARGB5
MOVFP AARGB1,WREG
MULWF BARGB1
MOVPF PRODH,AARGB2
MOVPF PRODL,AARGB3
MULWF BARGB2
MOVPF PRODL,WREG
ADDWF AARGB4,F
MOVPF PRODH,WREG
ADDWFC AARGB3,F
CLRF WREG,F
ADDWFC AARGB2,F
MOVFP TEMPB2,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB4,F
MOVPF PRODH,WREG
ADDWFC AARGB3,F
CLRF WREG,F
ADDWFC AARGB2,F
MOVFP AARGB0,WREG
MULWF BARGB2
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
MOVFP AARGB0,WREG
MULWF BARGB1
CLRF AARGB1,W
ADDWFC AARGB1,F
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
MOVFP TEMPB2,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
CLRF AARGB0,W
ADDWFC AARGB1,F
ADDWFC AARGB0,F
MOVFP TEMPB1,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
CLRF WREG,F
ADDWFC AARGB0,F
MOVFP TEMPB0,WREG
MULWF BARGB0
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 32x16 Bit Signed Fixed Point Multiply 32 x 16 -> 48
;
; Input: 32 bit signed fixed point multiplicand in AARGB0, AARGB1,
; AARGB2, AARGB3
; 16 bit signed fixed point multiplier in BARGB0, BARGB1
;
; Use: CALL FXM3216S
;
; Output: 48 bit signed fixed point product in AARGB0, AARGB1,
; AARGB2, AARGB3, AARGB4, AARGB5
;
; Result: AARG <-- AARG * BARG
;
; Max Timing: 73 clks
;
; Min Timing: 61 clks
;
; PM: 72 DM: 12
;
FXM3216S MOVPF AARGB0,TEMPB0
MOVPF AARGB1,TEMPB1
MOVPF AARGB2,TEMPB2
MOVPF AARGB3,TEMPB3
MOVFP AARGB3,WREG
MULWF BARGB1
MOVPF PRODH,AARGB4
MOVPF PRODL,AARGB5
MOVFP AARGB2,WREG
MULWF BARGB0
MOVPF PRODH,AARGB2
MOVPF PRODL,AARGB3
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB4,F
MOVPF PRODH,WREG
ADDWFC AARGB3,F
CLRF WREG,F
ADDWFC AARGB2,F
MOVFP TEMPB3,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB4,F
MOVPF PRODH,WREG
ADDWFC AARGB3,F
CLRF WREG,F
ADDWFC AARGB2,F
MOVFP AARGB1,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
MOVFP AARGB0,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
MOVFP AARGB0,WREG
MULWF BARGB0
CLRF AARGB0,W
ADDWFC AARGB0,F
MOVPF PRODL,WREG
ADDWF AARGB1,F
MOVPF PRODH,WREG
ADDWFC AARGB0,F
BTFSS BARGB0,MSB
GOTO TSIGN3216A
MOVFP TEMPB3,WREG
SUBWF AARGB3,F
MOVFP TEMPB2,WREG
SUBWFB AARGB2,F
MOVFP TEMPB1,WREG
SUBWFB AARGB1,F
MOVFP TEMPB0,WREG
SUBWFB AARGB0,F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 32x16 Bit Unsigned Fixed Point Multiply 32 x 16 -> 48
;
; Input: 32 bit unsigned fixed point multiplicand in AARGB0, AARGB1,
; AARGB2, AARGB3
; 16 bit unsigned fixed point multiplier in BARGB0, BARGB1
;
; Use: CALL FXM3216U
;
; Output: 48 bit unsigned fixed point product in AARGB0, AARGB1,
; AARGB2, AARGB3, AARGB4, AARGB5
;
; Result: AARG <-- AARG * BARG
;
; Max Timing: 54 clks
;
; Min Timing: 54 clks
;
; PM: 53 DM: 9
MOVFP AARGB3,WREG
MULWF BARGB1
MOVPF PRODH,AARGB4
MOVPF PRODL,AARGB5
MOVFP AARGB2,WREG
MULWF BARGB0
MOVPF PRODH,AARGB2
MOVPF PRODL,AARGB3
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB4,F
MOVPF PRODH,WREG
ADDWFC AARGB3,F
CLRF WREG,F
ADDWFC AARGB2,F
MOVFP TEMPB3,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB4,F
MOVPF PRODH,WREG
ADDWFC AARGB3,F
CLRF WREG,F
ADDWFC AARGB2,F
MOVFP AARGB1,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
MOVFP AARGB1,WREG
MULWF BARGB0
CLRF AARGB1,W
ADDWFC AARGB1,F
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
MOVFP AARGB0,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
MOVFP AARGB0,WREG
MULWF BARGB0
CLRF AARGB0,W
ADDWFC AARGB0,F
MOVPF PRODL,WREG
ADDWF AARGB1,F
MOVPF PRODH,WREG
ADDWFC AARGB0,F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
MOVFP AARGB3,WREG
MULWF BARGB2
MOVPF PRODH,AARGB5
MOVPF PRODL,SIGN
MOVFP AARGB2,WREG
MULWF BARGB1
MOVPF PRODH,AARGB3
MOVPF PRODL,AARGB4
MULWF BARGB2
MOVPF PRODL,WREG
ADDWF AARGB5,F
MOVPF PRODH,WREG
ADDWFC AARGB4,F
CLRF WREG,F
ADDWFC AARGB3,F
MOVF TEMPB3,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB5,F
MOVPF PRODH,WREG
ADDWFC AARGB4,F
CLRF WREG,F
ADDWFC AARGB3,F
MOVFP AARGB1,WREG
MULWF BARGB2
MOVPF PRODL,WREG
ADDWF AARGB4,F
MOVPF PRODH,WREG
ADDWFC AARGB3,F
MOVFP AARGB1,WREG
MULWF BARGB1
CLRF AARGB2,W
ADDWFC AARGB2,F
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
MOVFP TEMPB2,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
CLRF WREG,F
ADDWFC AARGB1,F
MOVFP TEMPB1,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
MOVFP AARGB0,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
MOVFP AARGB0,WREG
MULWF BARGB0
CLRF AARGB0,W
ADDWFC AARGB0,F
MOVPF PRODL,WREG
ADDWF AARGB1,F
MOVPF PRODH,WREG
ADDWFC AARGB0,F
MOVFP TEMPB0,WREG
MULWF BARGB2
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
CLRF WREG,F
ADDWFC AARGB1,F
ADDWFC AARGB0,F
MOVFP SIGN,AARGB6
BTFSS BARGB0,MSB
GOTO TSIGN3224A
MOVFP TEMPB3,WREG
SUBWF AARGB3,F
MOVFP TEMPB2,WREG
SUBWFB AARGB2,F
MOVFP TEMPB1,WREG
SUBWFB AARGB1,F
MOVFP TEMPB0,WREG
SUBWFB AARGB0,F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 32x24 Bit Unsigned Fixed Point Multiply 32 x 24 -> 56
;
; Input: 32 bit unsigned fixed point multiplicand in AARGB0, AARGB1,
; AARGB2, AARGB3
; 24 bit unsigned fixed point multiplier in BARGB0, BARGB1, BARGB2
;
; Use: CALL FXM3224U
;
; Output: 56 bit unsigned fixed point product in AARGB0, AARGB1,
; AARGB2, AARGB3, AARGB4, AARGB5, AARGB6
;
; Result: AARG <-- AARG * BARG
;
; Max Timing: 90 clks
;
; Min Timing: 90 clks
;
; PM: 89 DM: 15
;
;
FXM3224U MOVPF AARGB0,TEMPB0
MOVPF AARGB1,TEMPB1
MOVPF AARGB2,TEMPB2
MOVPF AARGB3,TEMPB3
MOVFP AARGB3,WREG
MULWF BARGB2
MOVPF PRODH,AARGB5
MOVPF PRODL,SIGN
MOVFP AARGB2,WREG
MULWF BARGB1
MOVPF PRODH,AARGB3
MOVPF PRODL,AARGB4
MULWF BARGB2
MOVPF PRODL,WREG
ADDWF AARGB5,F
MOVPF PRODH,WREG
ADDWFC AARGB4,F
CLRF WREG,F
ADDWFC AARGB3,F
MOVFP TEMPB3,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB5,F
MOVPF PRODH,WREG
ADDWFC AARGB4,F
CLRF WREG,F
ADDWFC AARGB3,F
MOVFP AARGB1,WREG
MULWF BARGB2
MOVFP TEMPB3,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB4,F
MOVPF PRODH,WREG
ADDWFC AARGB3,F
CLRF AARGB1,W
ADDWFC AARGB2,F
ADDWFC AARGB1,F
MOVFP TEMPB2,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
CLRF WREG,F
ADDWFC AARGB1,F
MOVFP TEMPB1,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
MOVFP AARGB0,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
MOVFP AARGB0,WREG
MULWF BARGB0
CLRF AARGB0,W
ADDWFC AARGB0,F
MOVPF PRODL,WREG
ADDWF AARGB1,F
MOVPF PRODH,WREG
ADDWFC AARGB0,F
MOVFP TEMPB0,WREG
MULWF BARGB2
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
CLRF WREG,F
ADDWFC AARGB1,F
ADDWFC AARGB0,F
MOVFP SIGN,AARGB6
;**********************************************************************************************
;**********************************************************************************************
;
; 32x32 Bit Signed Fixed Point Multiply 32 x 32 -> 64
;
; Input: 32 bit signed fixed point multiplicand in AARGB0, AARGB1,
; AARGB2, AARGB3
; 32 bit signed fixed point multiplier in BARGB0, BARGB1,
; BARGB2, BARGB3
;
; Use: CALL FXM3232S
;
; Output: 64 bit signed fixed point product in AARGB0, AARGB1,
; AARGB2, AARGB3, AARGB4, AARGB5, AARGB6, AARGB7
;
; Result: AARG <-- AARG * BARG
;
; Max Timing: 145 clks
;
; Min Timing: 129 clks
;
; PM: 144 DM: 18
;
FXM3232S MOVPF AARGB0,TEMPB0
MOVPF AARGB1,TEMPB1
MOVPF AARGB2,TEMPB2
MOVPF AARGB3,TEMPB3
MOVFP AARGB3,WREG
MULWF BARGB3
MOVPF PRODL,TBLPTRL
MOVPF PRODH,TBLPTRH
MOVFP AARGB2,WREG
MULWF BARGB2
MOVPF PRODL,AARGB5
MOVPF PRODH,AARGB4
MULWF BARGB3
MOVPF PRODL,WREG
ADDWF TBLPTRH,F
MOVPF PRODH,WREG
ADDWFC AARGB5,F
CLRF WREG,F
ADDWFC AARGB4,F
MOVFP TEMPB3,WREG
MULWF BARGB2
MOVPF PRODL,WREG
ADDWF TBLPTRH,F
MOVPF PRODH,WREG
ADDWFC AARGB5,F
CLRF WREG,F
ADDWFC AARGB4,F
MOVFP AARGB1,WREG
MULWF BARGB3
MOVPF PRODL,WREG
ADDWF AARGB5,F
MOVPF PRODH,WREG
ADDWFC AARGB4,F
MOVFP AARGB1,WREG
MULWF BARGB2
CLRF AARGB3,W
MOVFP TEMPB3,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB5,F
MOVPF PRODH,WREG
ADDWFC AARGB4,F
CLRF AARGB2,W
ADDWFC AARGB3,F
ADDWFC AARGB2,F
MOVFP TEMPB2,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB4,F
MOVPF PRODH,WREG
ADDWFC AARGB3,F
CLRF WREG,F
ADDWFC AARGB2,F
MOVFP TEMPB1,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
MOVFP AARGB0,WREG
MULWF BARGB2
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
MOVFP AARGB0,WREG
MULWF BARGB1
CLRF AARGB1,W
ADDWFC AARGB1,F
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
MOVFP TEMPB0,WREG
MULWF BARGB3
MOVPF PRODL,WREG
ADDWF AARGB4,F
MOVPF PRODH,WREG
ADDWFC AARGB3,F
CLRF WREG,F
ADDWFC AARGB2,F
ADDWFC AARGB1,F
MOVFP TEMPB0,WREG
MULWF BARGB0
MOVPF PRODH,AARGB0
MOVPF PRODL,WREG
ADDWF AARGB1,F
CLRF WREG,F
ADDWFC AARGB0,F
MOVFP TEMPB3,WREG
MOVFP TEMPB2,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
CLRF WREG,F
ADDWFC AARGB1,F
ADDWFC AARGB0,F
MOVFP TEMPB1,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
CLRF WREG,F
ADDWFC AARGB0,F
MOVFP TBLPTRL,AARGB7
MOVFP TBLPTRH,AARGB6
BTFSS BARGB0,MSB
GOTO TSIGN3232A
MOVFP TEMPB3,WREG
SUBWF AARGB3,F
MOVFP TEMPB2,WREG
SUBWFB AARGB2,F
MOVFP TEMPB1,WREG
SUBWFB AARGB1,F
MOVFP TEMPB0,WREG
SUBWFB AARGB0,F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 32x32 Bit Unsigned Fixed Point Multiply 32 x 32 -> 64
;
; Input: 32 bit unsigned fixed point multiplicand in AARGB0, AARGB1,
; AARGB2, AARGB3
; 32 bit unsigned fixed point multiplier in BARGB0, BARGB1,
; BARGB2, BARGB3
MOVFP AARGB3,WREG
MULWF BARGB3
MOVPF PRODL,TBLPTRL
MOVPF PRODH,TBLPTRH
MOVFP AARGB2,WREG
MULWF BARGB2
MOVPF PRODL,AARGB5
MOVPF PRODH,AARGB4
MULWF BARGB3
MOVPF PRODL,WREG
ADDWF TBLPTRH,F
MOVPF PRODH,WREG
ADDWFC AARGB5,F
CLRF WREG,F
ADDWFC AARGB4,F
MOVFP TEMPB3,WREG
MULWF BARGB2
MOVPF PRODL,WREG
ADDWF TBLPTRH,F
MOVPF PRODH,WREG
ADDWFC AARGB5,F
CLRF WREG,F
ADDWFC AARGB4,F
MOVFP AARGB1,WREG
MULWF BARGB3
MOVPF PRODL,WREG
ADDWF AARGB5,F
MOVPF PRODH,WREG
ADDWFC AARGB4,F
MOVFP AARGB1,WREG
MULWF BARGB2
CLRF AARGB3,W
ADDWFC AARGB3,F
MOVPF PRODL,WREG
ADDWF AARGB4,F
MOVPF PRODH,WREG
ADDWFC AARGB3,F
MOVFP TEMPB3,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB5,F
MOVFP TEMPB2,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB4,F
MOVPF PRODH,WREG
ADDWFC AARGB3,F
CLRF WREG,F
ADDWFC AARGB2,F
MOVFP TEMPB1,WREG
MULWF BARGB1
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
MOVFP AARGB0,WREG
MULWF BARGB2
MOVPF PRODL,WREG
ADDWF AARGB3,F
MOVPF PRODH,WREG
ADDWFC AARGB2,F
MOVFP AARGB0,WREG
MULWF BARGB1
CLRF AARGB1,W
ADDWFC AARGB1,F
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
MOVFP TEMPB0,WREG
MULWF BARGB3
MOVPF PRODL,WREG
ADDWF AARGB4,F
MOVPF PRODH,WREG
ADDWFC AARGB3,F
CLRF WREG,F
ADDWFC AARGB2,F
ADDWFC AARGB1,F
MOVFP TEMPB0,WREG
MULWF BARGB0
MOVPF PRODH,AARGB0
MOVPF PRODL,WREG
ADDWF AARGB1,F
CLRF WREG,F
ADDWFC AARGB0,F
MOVFP TEMPB3,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB4,F
MOVPF PRODH,WREG
ADDWFC AARGB3,F
CLRF WREG,F
ADDWFC AARGB2,F
ADDWFC AARGB1,F
ADDWFC AARGB0,F
MOVFP TEMPB1,WREG
MULWF BARGB0
MOVPF PRODL,WREG
ADDWF AARGB2,F
MOVPF PRODH,WREG
ADDWFC AARGB1,F
CLRF WREG,F
ADDWFC AARGB0,F
MOVFP TBLPTRL,AARGB7
MOVFP TBLPTRH,AARGB6
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
; $Revision: 2.4 $
;**********************************************************************************************
;**********************************************************************************************
;
; 32/32 Bit Division Macros
;
SDIV3232 macro
;
; Max Timing: 9+14+30*18+10 = 573 clks
;
; Min Timing: 9+14+30*17+3 = 536 clks
;
; PM: 9+14+30*24+10 = 753 DM: 12
;
variable i
MOVFP BARGB3,WREG
RLCF AARGB0,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
ADDWF REMB3, F
MOVFP BARGB2,WREG
ADDWFC REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
RLCF AARGB0, F
variable i = D’2’
RLCF AARGB0,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB0,LSB
GOTO SADD22#v(i)
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK22#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB0,LSB
variable i = D’9’
RLCF AARGB1,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB1,LSB
GOTO SADD22#v(i)
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK22#v(i)
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB1,LSB
GOTO SADD2216
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
variable i = D’17’
RLCF AARGB2,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB2,LSB
GOTO SADD22#v(i)
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK22#v(i)
variable i = i + 1
endw
RLCF AARGB3,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB2,LSB
GOTO SADD2224
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
variable i = D’25’
RLCF AARGB3,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB3,LSB
GOTO SADD22#v(i)
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK22#v(i)
variable i = i + 1
endw
BTFSC AARGB3,LSB
GOTO SOK22
MOVFP BARGB3,WREG
ADDWF REMB3, F
MOVFP BARGB2,WREG
ADDWFC REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
SOK22
endm
UDIV3232 macro
;
; restore = 25/30 clks, nonrestore = 17/20 clks
variable i = D’0’
RLCF AARGB0,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
BTFSC _C
GOTO UOK22#v(i)
MOVFP BARGB3,WREG
ADDWF REMB3, F
MOVFP BARGB2,WREG
ADDWFC REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
BCF _C
variable i = i + 1
endw
variable i = D’8’
RLCF AARGB1,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
BTFSC _C
GOTO UOK22#v(i)
MOVFP BARGB3,WREG
ADDWF REMB3, F
MOVFP BARGB2,WREG
variable i = i + 1
endw
CLRF TEMP, F
variable i = D’16’
RLCF AARGB2,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB3,WREG
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG
SUBWFB TEMP, F
BTFSC _C
GOTO UOK22#v(i)
MOVFP BARGB3,WREG
ADDWF REMB3, F
MOVFP BARGB2,WREG
ADDWFC REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
CLRF WREG, F
ADDWFC TEMP, F
BCF _C
variable i = i + 1
endw
variable i = D’24’
RLCF AARGB3,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB3,WREG
variable i = i + 1
endw
endm
NDIV3232 macro
RLCF AARGB0,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF TEMP,W
SUBWFB TEMP, F
RLCF AARGB0, F
variable i = D’1’
RLCF AARGB0,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB3,WREG
BTFSS AARGB0,LSB
GOTO NADD228
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK228
variable i = D’9’
RLCF AARGB1,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB3,WREG
BTFSS AARGB1,LSB
GOTO NADD22#v(i)
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK22#v(i)
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB3,WREG
BTFSS AARGB1,LSB
GOTO NADD2216
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK2216
variable i = D’17’
RLCF AARGB2,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB3,WREG
BTFSS AARGB2,LSB
GOTO NADD22#v(i)
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK22#v(i)
variable i = i + 1
endw
RLCF AARGB3,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB3,WREG
BTFSS AARGB2,LSB
GOTO NADD2224
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK2224
variable i = D’25’
RLCF AARGB3,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB3,WREG
BTFSS AARGB3,LSB
GOTO NADD22#v(i)
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK22#v(i)
variable i = i + 1
endw
BTFSC AARGB3,LSB
GOTO NOK22
MOVFP BARGB3,WREG
ADDWF REMB3, F
MOVFP BARGB2,WREG
ADDWFC REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
NOK22
endm
UDIV3231 macro
RLCF AARGB0,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
RLCF AARGB0, F
variable i = D’1’
RLCF AARGB0,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB0,LSB
GOTO UADD21#v(i)
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK21#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB0,LSB
variable i = D’9’
RLCF AARGB1,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB1,LSB
GOTO UADD21#v(i)
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK21#v(i)
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB1,LSB
GOTO UADD2116
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
variable i = D’17’
RLCF AARGB2,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB2,LSB
GOTO UADD21#v(i)
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK21#v(i)
variable i = i + 1
endw
RLCF AARGB3,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB2,LSB
GOTO UADD2124
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
variable i = D’25’
RLCF AARGB3,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB3,LSB
GOTO UADD21#v(i)
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK21#v(i)
variable i = i + 1
endw
BTFSC AARGB3,LSB
GOTO UOK21
MOVFP BARGB3,WREG
ADDWF REMB3, F
MOVFP BARGB2,WREG
ADDWFC REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
UOK21
endm
UDIV3131 macro
;
; Max Timing: 9+14+30*18+10 = 573 clks
MOVFP BARGB3,WREG
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
RLCF AARGB0, F
RLCF AARGB0,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
ADDWF REMB3, F
MOVFP BARGB2,WREG
ADDWFC REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
RLCF AARGB0, F
variable i = D’2’
RLCF AARGB0,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB0,LSB
GOTO UADD11#v(i)
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK11#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB0,LSB
GOTO UADD118
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK118
variable i = D’9’
RLCF AARGB1,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB1,LSB
GOTO UADD11#v(i)
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK11#v(i)
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB3, F
RLCF REMB2, F
variable i = D’17’
RLCF AARGB2,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB2,LSB
GOTO UADD11#v(i)
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK11#v(i)
variable i = i + 1
endw
RLCF AARGB3,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
variable i = D’25’
RLCF AARGB3,W
RLCF REMB3, F
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB3,WREG
BTFSS AARGB3,LSB
GOTO UADD11#v(i)
SUBWF REMB3, F
MOVFP BARGB2,WREG
SUBWFB REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK11#v(i)
variable i = i + 1
endw
BTFSC AARGB3,LSB
GOTO UOK11
MOVFP BARGB3,WREG
ADDWF REMB3, F
MOVFP BARGB2,WREG
ADDWFC REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
endm
;**********************************************************************************************
;**********************************************************************************************
;
; 32/24 Bit Division Macros
;
SDIV3224 macro
;
; Max Timing: 7+11+30*15+8 = 476 clks
;
; Min Timing: 7+11+30*14+3 = 441 clks
;
; PM: 7+11+30*19+8 = 596 DM: 10
;
variable i
MOVFP BARGB2,WREG
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
RLCF AARGB0, F
RLCF AARGB0,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
ADDWF REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
RLCF AARGB0, F
variable i = D’2’
RLCF AARGB0,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB0,LSB
GOTO SADD24#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK24#v(i)
endw
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB0,LSB
GOTO SADD248
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK248
variable i = D’9’
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB1,LSB
GOTO SADD24#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK24#v(i)
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB1,LSB
GOTO SADD2416
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
variable i = D’17’
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB2,LSB
GOTO SADD24#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK24#v(i)
variable i = i + 1
endw
RLCF AARGB3,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB2,LSB
GOTO SADD2424
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK2424
variable i = D’25’
RLCF AARGB3,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB3,LSB
GOTO SADD24#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK24#v(i)
variable i = i + 1
endw
BTFSC AARGB3,LSB
GOTO SOK24
MOVFP BARGB2,WREG
ADDWF REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
SOK24
endm
UDIV3224 macro
;
; restore = 20/25 clks, nonrestore = 14/17 clks
;
; Max Timing: 16*20+1+16*25 = 721 clks
;
; Min Timing: 16*14+1+16*17 = 497 clks
;
; PM: 16*20+1+16*25 = 721 DM: 11
;
variable i
variable i = D’0’
RLCF AARGB0,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
variable i = i + 1
endw
variable i = D’8’
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
BTFSC _C
GOTO UOK24#v(i)
MOVFP BARGB2,WREG
ADDWF REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
BCF _C
variable i = i + 1
endw
CLRF TEMP, F
variable i = D’16’
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB2,WREG
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
variable i = i + 1
endw
variable i = D’24’
RLCF AARGB3,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB2,WREG
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
BTFSC _C
GOTO UOK24#v(i)
MOVFP BARGB2,WREG
ADDWF REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
CLRF WREG, F
ADDWFC TEMP, F
BCF _C
variable i = i + 1
endw
endm
NDIV3224 macro
;
; Max Timing: 13+31*18+8 = 579 clks
;
; Min Timing: 13+31*17+3 = 543 clks
;
; PM: 13+31*24+8 = 765 DM: 11
;
variable i
variable i = D’1’
RLCF AARGB0,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB2,WREG
BTFSS AARGB0,LSB
GOTO NADD24#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK24#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB2,WREG
BTFSS AARGB0,LSB
GOTO NADD248
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK248
variable i = D’9’
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB2,WREG
BTFSS AARGB1,LSB
GOTO NADD24#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK24#v(i)
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB2,WREG
BTFSS AARGB1,LSB
GOTO NADD2416
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK2416
variable i = D’17’
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB2,WREG
BTFSS AARGB2,LSB
GOTO NADD24#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK24#v(i)
variable i = i + 1
endw
RLCF AARGB3,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB2,WREG
BTFSS AARGB2,LSB
GOTO NADD2424
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK2424
variable i = D’25’
RLCF AARGB3,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB2,WREG
BTFSS AARGB3,LSB
GOTO NADD24#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK24#v(i)
variable i = i + 1
endw
BTFSC AARGB3,LSB
GOTO NOK24
MOVFP BARGB2,WREG
ADDWF REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
NOK24
endm
UDIV3223 macro
;
; Max Timing: 11+31*15+8 = 484 clks
;
; Min Timing: 11+31*14+3 = 448 clks
;
; PM: 11+31*19+8 = 608 DM: 10
;
variable i
RLCF AARGB0,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
SUBWF REMB2, F
variable i = D’1’
RLCF AARGB0,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB0,LSB
GOTO UADD23#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK23#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB0,LSB
GOTO UADD238
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK238
variable i = D’9’
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB1,LSB
GOTO UADD2316
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK2316
variable i = D’17’
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB2,LSB
GOTO UADD23#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK23#v(i)
variable i = i + 1
endw
RLCF AARGB3,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB2,LSB
GOTO UADD2324
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK2324
variable i = D’25’
RLCF AARGB3,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB3,LSB
GOTO UADD23#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK23#v(i)
variable i = i + 1
endw
BTFSC AARGB3,LSB
GOTO UOK23
MOVFP BARGB2,WREG
ADDWF REMB2, F
MOVFP BARGB1,WREG
endm
UDIV3123 macro
;
; Max Timing: 7+11+30*15+8 = 476 clks
;
; Min Timing: 7+11+30*14+3 = 441 clks
;
; PM: 7+11+30*19+8 = 596 DM: 10
;
variable i
MOVFP BARGB2,WREG
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
RLCF AARGB0, F
RLCF AARGB0,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
ADDWF REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
RLCF AARGB0, F
variable i = D’2’
RLCF AARGB0,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB0,LSB
GOTO UADD13#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK13#v(i)
variable i = i + 1
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB0,LSB
GOTO UADD138
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK138
variable i = D’9’
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB1,LSB
GOTO UADD13#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK13#v(i)
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB1,LSB
GOTO UADD1316
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
variable i = D’17’
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB2,LSB
GOTO UADD13#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK13#v(i)
variable i = i + 1
endw
RLCF AARGB3,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB2,LSB
GOTO UADD1324
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK1324
variable i = D’25’
RLCF AARGB3,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB3,LSB
GOTO UADD13#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK13#v(i)
variable i = i + 1
endw
BTFSC AARGB3,LSB
GOTO UOK13
MOVFP BARGB2,WREG
ADDWF REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
UOK13
endm
;**********************************************************************************************
;**********************************************************************************************
;
; 32/32 Bit Signed Fixed Point Divide 32/32 -> 32.32
;
; Input: 32 bit signed fixed point dividend in AARGB0, AARGB1,AARGB2,AARGB3
; 32 bit unsigned fixed point divisor in BARGB0, BARGB1, BARGB2, BARGB3
;
; Use: CALL FXD3232S
;
; Output: 32 bit signed fixed point quotient in AARGB0, AARGB1,AARGB2,AARGB3
; 32 bit fixed point remainder in REMB0, REMB1, REMB2, REMB3
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 27+573+5 = 605 clks A > 0, B > 0
; 34+573+23 = 630 clks A > 0, B < 0
; 34+573+23 = 630 clks A < 0, B > 0
; 41+573+5 = 619 clks A < 0, B < 0
; 12 clks A = 0
;
; Min Timing: 27+536+5 = 568 clks A > 0, B > 0
; 34+536+23 = 593 clks A > 0, B < 0
; 31+536+23 = 593 clks A < 0, B > 0
; 41+536+5 = 582 clks A < 0, B < 0
;
MOVPF AARGB0,WREG
XORWF BARGB0,W
BTFSC WREG,MSB
COMF SIGN,F
COMF BARGB3, F
COMF BARGB2, F
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB3, F
ADDWFC BARGB2, F
ADDWFC BARGB1, F
ADDWFC BARGB0, F
COMF AARGB3, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB3, F
ADDWFC AARGB2, F
ADDWFC AARGB1, F
ADDWFC AARGB0, F
C3232S SDIV3232
COMF AARGB3, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
CLRF WREG, F
INCF AARGB3, F
ADDWFC AARGB2, F
ADDWFC AARGB1, F
COMF REMB3, F
COMF REMB2, F
COMF REMB1, F
COMF REMB0, F
INCF REMB3, F
ADDWFC REMB2, F
ADDWFC REMB1, F
ADDWFC REMB0, F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 32/32 Bit Unsigned Fixed Point Divide 32/32 -> 32.32
;
; Input: 32 bit unsigned fixed point dividend in AARGB0, AARGB1,AARGB2,AARGB3
; 32 bit unsigned fixed point divisor in BARGB0, BARGB1, BARGB2, BARGB3
;
; Use: CALL FXD3232U
;
; Output: 32 bit unsigned fixed point quotient in AARGB0, AARGB1AARGB2,AARGB3
; 32 bit unsigned fixed point remainder in REMB0, REMB1, REMB2, REMB3
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 4+677+2 = 683 clks
;
; Min Timing: 4+639+2 = 645 clks
;
; PM: 4+925+1 = 930 DM: 13
;
FXD3232U CLRF REMB0, F
CLRF REMB1, F
CLRF REMB2, F
CLRF REMB3, F
NDIV3232
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 32/31 Bit Unsigned Fixed Point Divide 32/31 -> 32.31
;
; Input: 32 bit unsigned fixed point dividend in AARGB0, AARGB1,AARGB2,AARGB3
; 31 bit unsigned fixed point divisor in BARGB0, BARGB1, BARGB2, BARGB3
;
; Use: CALL FXD3231U
;
; Output: 32 bit unsigned fixed point quotient in AARGB0, AARGB1,AARGB2,AARGB3
; 31 bit unsigned fixed point remainder in REMB0, REMB1, REMB2, REMB3
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 4+582+2 = 588 clks
;
; Min Timing: 4+544+2 = 550 clks
;
; PM: 4+768+1 = 773 DM: 12
;
FXD3231U CLRF REMB0, F
CLRF REMB1, F
CLRF REMB2, F
CLRF REMB3, F
UDIV3231
RETLW 0x00
UDIV3131
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 32/24 Bit Signed Fixed Point Divide 32/24 -> 32.24
;
; Input: 32 bit signed fixed point dividend in AARGB0, AARGB1,AARGB2,AARGB3
; 24 bit unsigned fixed point divisor in BARGB0, BARGB1, BARGB2
;
; Use: CALL FXD3224S
;
; Output: 32 bit signed fixed point quotient in AARGB0, AARGB1,AARGB2,AARGB3
; 24 bit fixed point remainder in REMB0, REMB1, REMB2
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 25+476+5 = 506 clks A > 0, B > 0
; 30+476+21 = 527 clks A > 0, B < 0
; 32+476+21 = 529 clks A < 0, B > 0
; 37+476+5 = 518 clks A < 0, B < 0
; 11 clks A = 0
;
; Min Timing: 25+441+3 = 469 clks A > 0, B > 0
; 30+441+19 = 490 clks A > 0, B < 0
; 32+441+19 = 492 clks A < 0, B > 0
; 37+441+3 = 481 clks A < 0, B < 0
;
; PM: 37+596+20+51 = 704 DM: 12
;
FXD3224S CLRF SIGN,F
CLRF REMB0,F ; clear partial remainder
CLRF REMB1,F
CLRF REMB2,F
MOVPF AARGB0,WREG
IORWF AARGB1,W
IORWF AARGB2,W
MOVPF AARGB0,WREG
XORWF BARGB0,W
BTFSC WREG,MSB
COMF SIGN,F
COMF BARGB2, F
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB2, F
ADDWFC BARGB1, F
ADDWFC BARGB0, F
COMF AARGB3, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB3, F
ADDWFC AARGB2, F
ADDWFC AARGB1, F
ADDWFC AARGB0, F
C3224S SDIV3224
COMF AARGB3, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
CLRF WREG, F
INCF AARGB3, F
ADDWFC AARGB2, F
ADDWFC AARGB1, F
ADDWFC AARGB0, F
COMF REMB2, F
COMF REMB1, F
COMF REMB0, F
INCF REMB2, F
ADDWFC REMB1, F
ADDWFC REMB0, F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 32/24 Bit Unsigned Fixed Point Divide 32/24 -> 32.24
;
; Input: 32 bit unsigned fixed point dividend in AARGB0, AARGB1, AARGB2, AARGB3
; 24 bit unsigned fixed point divisor in BARGB0, BARGB1, BARGB2
;
; Use: CALL FXD3224U
;
; Output: 32 bit unsigned fixed point quotient in AARGB0, AARGB1, AARGB2, AARGB3
NDIV3224
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 32/23 Bit Unsigned Fixed Point Divide 32/23 -> 32.23
;
; Input: 32 bit unsigned fixed point dividend in AARGB0, AARGB1,AARGB2, AARGB3
; 23 bit unsigned fixed point divisor in BARGB0, BARGB1, BARGB2
;
; Use: CALL FXD3223U
;
; Output: 32 bit unsigned fixed point quotient in AARGB0, AARGB1,AARGB2, AARGB3
; 23 bit unsigned fixed point remainder in REMB0, REMB1, REMB2
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 3+484+2 = 489 clks
;
; Min Timing: 3+448+2 = 453 clks
;
; PM: 3+608+1 = 612 DM: 10
;
FXD3223U CLRF REMB0, F
CLRF REMB1, F
CLRF REMB2, F
UDIV3223
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 31/23 Bit Unsigned Fixed Point Divide 31/23 -> 31.23
;
; Input: 31 bit unsigned fixed point dividend in AARGB0, AARGB1,AARGB2, AARGB3
; 23 bit unsigned fixed point divisor in BARGB0, BARGB1, BARGB2
;
; Use: CALL FXD3123U
;
; Output: 31 bit unsigned fixed point quotient in AARGB0, AARGB1,AARGB2, AARGB3
; 23 bit unsigned fixed point remainder in REMB0, REMB1, REMB2
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 3+476+2 = 481 clks
;
; Min Timing: 3+441+2 = 446 clks
UDIV3123
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
; $Revision: 2.4 $
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
RLCF AARGB0, F
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
RLCF AARGB0, F
variable i = D’2’
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO SADD46#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK46#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO SADD468
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK468
variable i = D’9’
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO SADD4616
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK4616
variable i = D’17’
RLCF AARGB2,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB2,LSB
GOTO SADD46#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK46#v(i)
variable i = i + 1
endw
BTFSC AARGB2,LSB
GOTO SOK46
endm
UDIV2416 macro
;
; restore = 15/20 clks, nonrestore = 11/14 clks
;
; Max Timing: 16*15+1+8*20 = 401 clks
;
; Min Timing: 16*11+1+8*14 = 289 clks
;
; PM: 16*15+1+8*20 = 401 DM: 8
;
variable i
variable i = D’0’
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
BTFSC _C
GOTO UOK46#v(i)
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
BCF _C
variable i = i + 1
endw
variable i = D’8’
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
BTFSC _C
GOTO UOK46#v(i)
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
BCF _C
variable i = i + 1
endw
CLRF TEMP, F
variable i = D’16’
RLCF AARGB2,W
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
BTFSC _C
GOTO UOK46#v(i)
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
CLRF WREG, F
ADDWFC TEMP, F
BCF _C
variable i = i + 1
endw
endm
NDIV2416 macro
;
; Max Timing: 10+23*15+6 = 361 clks
;
; Min Timing: 10+23*14+3 = 335 clks
;
; PM: 10+23*19+6 = 450 DM: 8
;
variable i
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF TEMP,W
SUBWFB TEMP, F
RLCF AARGB0, F
variable i = D’1’
RLCF AARGB0,W
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO NADD468
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK468
variable i = D’9’
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO NADD46#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK46#v(i)
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO NADD4616
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK4616
variable i = D’17’
RLCF AARGB2,W
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB1,WREG
BTFSS AARGB2,LSB
GOTO NADD46#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK46#v(i)
variable i = i + 1
endw
BTFSC AARGB2,LSB
GOTO NOK46
MOVFP BARGB1,WREG
NOK46
endm
UDIV2415 macro
;
; Max Timing: 8+23*12+6 = 290 clks
;
; Min Timing: 8+23*11+3 = 264 clks
;
; PM: 8+23*14+6 = 336 DM: 8
;
variable i
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
RLCF AARGB0, F
variable i = D’1’
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO UADD45#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK45#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO UADD458
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK458
variable i = D’9’
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO UADD45#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK45#v(i)
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO UADD4516
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK4516
variable i = D’17’
RLCF AARGB2,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB2,LSB
GOTO UADD45#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK45#v(i)
variable i = i + 1
endw
BTFSC AARGB2,LSB
GOTO UOK45
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
UOK45
endm
UDIV2315 macro
;
; Max Timing: 5+8+22*12+6 = 283 clks
;
; Min Timing: 5+8+22*11+3 = 258 clks
;
; PM: 5+8+22*14+6 = 327 DM: 8
;
variable i
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
RLCF AARGB0, F
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
RLCF AARGB0, F
variable i = D’2’
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO UADD35#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK35#v(i)
variable i = i + 1
endw
variable i = D’9’
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO UADD35#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK35#v(i)
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO UADD3516
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK3516
variable i = D’17’
RLCF AARGB2,W
RLCF REMB1, F
variable i = i + 1
endw
BTFSC AARGB2,LSB
GOTO UOK35
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
UOK35
endm
;**********************************************************************************************
;**********************************************************************************************
;
; 16/16 Bit Division Macros
;
SDIV1616 macro
;
; Max Timing: 5+8+14*12+6 = 187 clks
;
; Min Timing: 5+8+14*11+6 = 173 clks
;
; PM: 5+8+14*14+6 = 215 DM: 6
;
variable i
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
RLCF AARGB0, F
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
RLCF AARGB0, F
variable i = D’2’
RLCF AARGB0,W
RLCF REMB1, F
BTFSS AARGB0,LSB
GOTO SADD66#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK66#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO SADD668
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK668
variable i = D’9’
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO SADD66#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK66#v(i)
variable i = i + 1
endw
BTFSC AARGB1,LSB
GOTO SOK66
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
SOK66
endm
UDIV1616 macro
;
; restore = 15 clks, nonrestore = 11 clks
;
; Max Timing: 8*15+8*15 = 240 clks
;
; Min Timing: 8*11+8*11 = 176 clks
;
; PM: 8*15+8*15 = 240 DM: 6
;
variable i
variable i = D’0’
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
BTFSC _C
GOTO UOK66#v(i)
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
BCF _C
UOK66#v(i) RLCF AARGB0, F
variable i = i + 1
endw
variable i = D’8’
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
BTFSC _C
GOTO UOK66#v(i)
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
variable i = i + 1
endw
endm
NDIV1616 macro
;
; Max Timing: 9+15*15+6 = 240 clks
;
; Min Timing: 9+15*14+6 = 225 clks
;
; PM: 9+15*19+6 = 300 DM: 7
;
variable i
RLCF AARGB0,W
RLCF REMB1, F
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF TEMP,W
SUBWFB TEMP, F
RLCF AARGB0, F
variable i = D’1’
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO NADD66#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK66#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO NADD668
variable i = D’9’
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO NADD66#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK66#v(i)
variable i = i + 1
endw
BTFSC AARGB1,LSB
GOTO NOK66
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
NOK66
endm
UDIV1615 macro
;
; Max Timing: 7+15*12+6 = 193 clks
;
; Min Timing: 7+15*11+6 = 178 clks
;
; PM: 7+15*14+6 = 213 DM: 6
;
variable i
RLCF AARGB0,W
variable i = D’1’
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO UADD65#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK65#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO UADD658
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK658
variable i = D’9’
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO UADD65#v(i)
SUBWF REMB1, F
variable i = i + 1
endw
BTFSC AARGB1,LSB
GOTO UOK65
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
UOK65
endm
UDIV1515 macro
;
; Max Timing: 5+8+14*12+6 = 187 clks
;
; Min Timing: 5+8+14*11+6 = 173 clks
;
; PM: 5+8+14*14+6 = 215 DM: 6
;
variable i
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
RLCF AARGB0, F
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
RLCF AARGB0, F
variable i = D’2’
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO UADD55#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK55#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO UADD558
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK558
variable i = D’9’
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO UADD55#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK55#v(i)
variable i = i + 1
endw
BTFSC AARGB1,LSB
GOTO UOK55
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
UOK55
;_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
;
; Extra 16 Bit Divide Macros
;
DIV1616 macro
;
; Timing: restore = 16 clks, nonrestore = 13 clks 16*16 = 256 clks
;
variable i
variable i = D’0’
RLCF AARGB1, F
RLCF AARGB0, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
BTFSS _C
GOTO RS1616_#v( i )
BSF AARGB1,LSB
GOTO OK1616_#v( i )
OK1616_#v(i)
variable i = i + 1
endw
endm
DIVMAC macro
;
; Timing: restore = 19 clks, nonrestore = 14 clks 16*19 = 304 clks
;
variable i
variable i = D’0’
RLCF AARGB1, F
RLCF AARGB0, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB0,WREG
SUBWF REMB0,W
BTFSS _Z
GOTO notz#v( i )
MOVFP BARGB1,WREG
SUBWF REMB1,W
notz#v( i ) BTFSS _C
GOTO nosub#v( i )
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
BSF AARGB1,LSB
GOTO ok#v(i)
ok#v(i)
variable i = i + 1
endw
endm
;**********************************************************************************************
;**********************************************************************************************
;
; 16/08 Bit Division Macros
;
SDIV1608 macro
;
; Max Timing: 3+5+14*8+2 = 122 clks
;
; Min Timing: 3+5+14*8+2 = 122 clks
;
; PM: 3+5+14*8+2 = 122 DM: 4
;
variable i
MOVFP BARGB0,WREG
SUBWF REMB0, F
RLCF AARGB0, F
RLCF AARGB0,W
RLCF REMB0, F
MOVFP BARGB0,WREG
ADDWF REMB0, F
RLCF AARGB0, F
variable i = D’2’
RLCF AARGB0,W
RLCF REMB0, F
MOVFP BARGB0,WREG
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLCF AARGB0, F
variable i = i + 1
endw
RLCF AARGB1,W
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLCF AARGB1, F
variable i = D’9’
RLCF AARGB1,W
RLCF REMB0, F
MOVFP BARGB0,WREG
BTFSC AARGB1,LSB
SUBWF REMB0, F
BTFSS AARGB1,LSB
ADDWF REMB0, F
RLCF AARGB1, F
variable i = i + 1
endw
BTFSS AARGB1,LSB
ADDWF REMB0, F
endm
UDIV1608 macro
;
; restore = 9/15 clks, nonrestore = 8/11 clks
;
; Max Timing: 8*9+1+8*15 = 193 clks max
;
; Min Timing: 8*8+1+8*11 = 153 clks min
;
; PM: 8*9+1+8*15 = 193 DM: 4
;
variable i
variable i = D’0’
RLCF AARGB0,W
RLCF REMB0, F
MOVFP BARGB0,WREG
SUBWF REMB0, F
BTFSC _C
GOTO UOK68#v(i)
ADDWF REMB0, F
BCF _C
UOK68#v(i) RLCF AARGB0, F
variable i = i + 1
endw
CLRF TEMP, F
variable i = D’8’
RLCF AARGB1,W
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB0,WREG
SUBWF REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
BTFSC _C
GOTO UOK68#v(i)
MOVFP BARGB0,WREG
ADDWF REMB0, F
CLRF WREG, F
ADDWFC TEMP, F
BCF _C
UOK68#v(i) RLCF AARGB1, F
variable i = i + 1
endw
endm
NDIV1608 macro
;
; Max Timing: 7+15*12+3 = 190 clks
;
; Min Timing: 7+15*11+3 = 175 clks
;
; PM: 7+15*14+3 = 220 DM: 5
;
variable i
RLCF AARGB0,W
RLCF REMB0, F
MOVFP BARGB0,WREG
SUBWF REMB0, F
CLRF TEMP,W
SUBWFB TEMP, F
RLCF AARGB0, F
variable i = D’1’
RLCF AARGB0,W
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB0,WREG
BTFSS AARGB0,LSB
GOTO NADD68#v(i)
SUBWF REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK68#v(i)
endw
RLCF AARGB1,W
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB0,WREG
BTFSS AARGB0,LSB
GOTO NADD688
SUBWF REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK688
variable i = D’9’
RLCF AARGB1,W
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB0,WREG
BTFSS AARGB1,LSB
GOTO NADD68#v(i)
SUBWF REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK68#v(i)
variable i = i + 1
endw
BTFSS AARGB1,LSB
MOVFP BARGB0,WREG
ADDWF REMB0, F
endm
UDIV1607 macro
;
; Max Timing: 5+15*8+2 = 127 clks
;
; Min Timing: 5+15*8+2 = 127 clks
;
; PM: 5+15*8+2 = 127 DM: 4
;
variable i
variable i = D’1’
RLCF AARGB0,W
RLCF REMB0, F
MOVFP BARGB0,WREG
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLCF AARGB0, F
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB0, F
MOVFP BARGB0,WREG
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLCF AARGB1, F
variable i = D’9’
RLCF AARGB1,W
RLCF REMB0, F
MOVFP BARGB0,WREG
BTFSC AARGB1,LSB
SUBWF REMB0, F
BTFSS AARGB1,LSB
ADDWF REMB0, F
RLCF AARGB1, F
variable i = i + 1
endw
BTFSS AARGB1,LSB
ADDWF REMB0, F
endm
UDIV1507 macro
;
; Max Timing: 3+5+14*8+2 = 122 clks
;
; Min Timing: 3+5+14*8+2 = 122 clks
;
; PM: 3+5+14*8+2 = 122 DM: 4
;
variable i
MOVFP BARGB0,WREG
SUBWF REMB0, F
RLCF AARGB0, F
RLCF AARGB0,W
RLCF REMB0, F
MOVFP BARGB0,WREG
ADDWF REMB0, F
RLCF AARGB0, F
variable i = D’2’
RLCF AARGB0,W
RLCF REMB0, F
MOVFP BARGB0,WREG
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLCF AARGB0, F
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB0, F
MOVFP BARGB0,WREG
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLCF AARGB1, F
variable i = D’9’
RLCF AARGB1,W
RLCF REMB0, F
MOVFP BARGB0,WREG
BTFSC AARGB1,LSB
SUBWF REMB0, F
BTFSS AARGB1,LSB
ADDWF REMB0, F
RLCF AARGB1, F
variable i = i + 1
endw
BTFSS AARGB1,LSB
ADDWF REMB0, F
endm
;**********************************************************************************************
MOVFP BARGB0,WREG
SUBWF REMB0, F
RLCF AARGB0, F
RLCF AARGB0,W
RLCF REMB0, F
MOVFP BARGB0,WREG
ADDWF REMB0, F
RLCF AARGB0, F
variable i = D’2’
RLCF AARGB0,W
RLCF REMB0, F
MOVFP BARGB0,WREG
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLCF AARGB0, F
variable i = i + 1
endw
BTFSS AARGB0,LSB
ADDWF REMB0, F
endm
UDIV0808 macro
;
; restore = 9 clks, nonrestore = 8 clks
;
; Max Timing: 8*9 = 72 clks max
;
; Min Timing: 8*8 = 64 clks min
;
; PM: 8*9 = 72 DM: 3
;
variable i
variable i = D’0’
RLCF AARGB0,W
RLCF REMB0, F
BTFSC _C
GOTO UOK88#v(i)
ADDWF REMB0, F
BCF _C
UOK88#v(i) RLCF AARGB0, F
variable i = i + 1
endw
endm
UDIV0807 macro
;
; Max Timing: 5+7*8+2 = 63 clks
;
; Min Timing: 5+7*8+2 = 63 clks
;
; PM: 5+7*8+2 = 63 DM: 3
;
variable i
RLCF AARGB0,W
RLCF REMB0, F
MOVFP BARGB0,WREG
SUBWF REMB0, F
RLCF AARGB0, F
variable i = D’1’
RLCF AARGB0,W
RLCF REMB0, F
MOVFP BARGB0,WREG
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLCF AARGB0, F
variable i = i + 1
endw
BTFSS AARGB0,LSB
ADDWF REMB0, F
endm
UDIV0707 macro
;
; Max Timing: 3+5+6*8+2 = 58 clks
;
; Min Timing: 3+5+6*8+2 = 58 clks
;
; PM: 3+5+6*8+2 = 58 DM: 3
;
variable i
RLCF AARGB0,W
RLCF REMB0, F
MOVFP BARGB0,WREG
ADDWF REMB0, F
RLCF AARGB0, F
variable i = D’2’
RLCF AARGB0,W
RLCF REMB0, F
MOVFP BARGB0,WREG
BTFSC AARGB0,LSB
SUBWF REMB0, F
BTFSS AARGB0,LSB
ADDWF REMB0, F
RLCF AARGB0, F
variable i = i + 1
endw
BTFSS AARGB0,LSB
ADDWF REMB0, F
endm
;**********************************************************************************************
;**********************************************************************************************
;
; 24/16 Bit Signed Fixed Point Divide 24/16 -> 24.16
;
; Input: 24 bit fixed point dividend in AARGB0, AARGB1, AARGB2
; 16 bit fixed point divisor in BARGB0, BARGB1
;
; Use: CALL FXD2416S
;
; Output: 24 bit fixed point quotient in AARGB0, AARGB1, AARGB2
; 16 bit fixed point remainder in REMB0, REMB1
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 23+283+5 = 311 clks A > 0, B > 0
; 26+283+17 = 326 clks A > 0, B < 0
; 28+283+17 = 328 clks A < 0, B > 0
; 31+283+5 = 319 clks A < 0, B < 0
; 9 clks A = 0
;
; Min Timing: 23+258+5 = 286 clks A > 0, B > 0
; 26+258+17 = 301 clks A > 0, B < 0
; 28+258+17 = 303 clks A < 0, B > 0
; 31+258+5 = 294 clks A < 0, B < 0
;
; PM: 30+327+16+41 = 414 DM: 9
;
FXD2416S CLRF SIGN,F
CLRF REMB0,F ; clear partial remainder
CLRF REMB1,F
MOVPF AARGB0,WREG
IORWF AARGB1,W
MOVPF AARGB0,WREG
XORWF BARGB0,W
BTFSC WREG,MSB
COMF SIGN,F
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB1, F
ADDWFC BARGB0, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB2, F
ADDWFC AARGB1, F
ADDWFC AARGB0, F
C2416S SDIV2416
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
CLRF WREG, F
INCF AARGB2, F
ADDWFC AARGB1, F
ADDWFC AARGB0, F
COMF REMB1, F
COMF REMB0, F
INCF REMB1, F
ADDWFC REMB0, F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 24/16 Bit Unsigned Fixed Point Divide 24/16 -> 24.16
;
; Input: 24 bit unsigned fixed point dividend in AARGB0, AARGB1, AARGB2
; 16 bit unsigned fixed point divisor in BARGB0, BARGB1
;
; Use: CALL FXD2416U
;
; Output: 24 bit unsigned fixed point quotient in AARGB0, AARGB1, AARGB2
; 16 bit unsigned fixed point remainder in REMB0, REMB1
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 2+361+2 = 365 clks
;
; Min Timing: 2+335+2 = 339 clks
;
; PM: 2+450+1 = 453 DM: 8
;
FXD2416U CLRF REMB0, F
CLRF REMB1, F
NDIV2416
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
UDIV2415
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 23/15 Bit Unsigned Fixed Point Divide 23/15 -> 23.15
;
; Input: 23 bit unsigned fixed point dividend in AARGB0, AARGB1, AARGB2
; 15 bit unsigned fixed point divisor in BARGB0, BARGB1
;
; Use: CALL FXD2315U
;
; Output: 23 bit unsigned fixed point quotient in AARGB0, AARGB1, AARGB2
; 15 bit unsigned fixed point remainder in REMB0, REMB1
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 2+283+2 = 287 clks
;
; Min Timing: 2+258+2 = 262 clks
;
; PM: 2+327+1 = 330 DM: 8
;
FXD2315U CLRF REMB0, F
CLRF REMB1, F
UDIV2315
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 16/16 Bit Signed Fixed Point Divide 16/16 -> 16.16
;
; Input: 16 bit fixed point dividend in AARGB0, AARGB1
; 16 bit fixed point divisor in BARGB0, BARGB1
;
; Use: CALL FXD1616S
;
; Output: 16 bit fixed point quotient in AARGB0, AARGB1
; 16 bit fixed point remainder in REMB0, REMB1
MOVPF AARGB0,WREG
XORWF BARGB0,W
BTFSC WREG,MSB
COMF SIGN,F
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB1, F
ADDWFC BARGB0, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB1, F
ADDWFC AARGB0, F
C1616S SDIV1616
COMF AARGB1, F
COMF AARGB0, F
CLRF WREG, F
INCF AARGB1, F
ADDWFC AARGB0, F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 16/16 Bit Unsigned Fixed Point Divide 16/16 -> 16.16
;
; Input: 16 bit unsigned fixed point dividend in AARGB0, AARGB1
; 16 bit unsigned fixed point divisor in BARGB0, BARGB1
;
; Use: CALL FXD1616U
;
; Output: 16 bit unsigned fixed point quotient in AARGB0, AARGB1
; 16 bit unsigned fixed point remainder in REMB0, REMB1
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 2+240+2 = 244 clks
;
; Min Timing: 2+176+2 = 180 clks
;
UDIV1616
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 16/15 Bit Unsigned Fixed Point Divide 16/15 -> 16.15
;
; Input: 16 bit unsigned fixed point dividend in AARGB0, AARGB1
; 15 bit unsigned fixed point divisor in BARGB0, BARGB1
;
; Use: CALL FXD1615U
;
; Output: 16 bit unsigned fixed point quotient in AARGB0, AARGB1
; 15 bit unsigned fixed point remainder in REMB0, REMB1
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 2+193+2 = 197 clks
;
; Min Timing: 2+178+2 = 182 clks
;
; PM: 2+213+1 = 216 DM: 6
;
FXD1615U CLRF REMB0, F
CLRF REMB1, F
UDIV1615
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 15/15 Bit Unsigned Fixed Point Divide 15/15 -> 15.15
;
; Input: 15 bit unsigned fixed point dividend in AARGB0, AARGB1
; 15 bit unsigned fixed point divisor in BARGB0, BARGB1
;
; Use: CALL FXD1515U
;
; Output: 15 bit unsigned fixed point quotient in AARGB0, AARGB1
; 15 bit unsigned fixed point remainder in REMB0, REMB1
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 2+187+2 = 191 clks
;
; Min Timing: 2+173+2 = 177 clks
;
; PM: 2+215+1 = 218 DM: 6
;
FXD1515U CLRF REMB0, F
CLRF REMB1, F
UDIV1515
RETLW 0x00
;**********************************************************************************************
MOVPF AARGB0,WREG
XORWF BARGB0,W
BTFSC WREG,MSB
COMF SIGN,F
COMF BARGB0, F
INCF BARGB0, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB1, F
ADDWFC AARGB0, F
C1608S SDIV1608
COMF AARGB1, F
COMF AARGB0, F
CLRF WREG, F
INCF AARGB1, F
ADDWFC AARGB0, F
COMF REMB0, F
INCF REMB0, F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 16/8 Bit Unsigned Fixed Point Divide 16/08 -> 16.08
;
; Input: 16 bit unsigned fixed point dividend in AARGB0, AARGB1
; 8 bit unsigned fixed point divisor in BARGB0
;
; Use: CALL FXD1608U
;
; Output: 16 bit unsigned fixed point quotient in AARGB0, AARGB1
; 8 bit unsigned fixed point remainder in REMB0
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 1+193+2 = 196 clks
;
; Min Timing: 1+153+2 = 156 clks
;
UDIV1608
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 16/7 Bit Unsigned Fixed Point Divide 16/07 -> 16.07
;
; Input: 16 bit unsigned fixed point dividend in AARGB0, AARGB1
; 7 bit unsigned fixed point divisor in BARGB0
;
; Use: CALL FXD1607U
;
; Output: 16 bit unsigned fixed point quotient in AARGB0, AARGB1
; 7 bit unsigned fixed point remainder in REMB0
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 1+127+2 = 130 clks
;
; Min Timing: 1+127+2 = 130 clks
;
; PM: 1+127+1 = 129 DM: 4
;
FXD1607U CLRF REMB0, F
UDIV1607
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
; 15/7 Bit Unsigned Fixed Point Divide 15/07 -> 15.07
;
; Input: 15 bit unsigned fixed point dividend in AARGB0, AARGB1
; 7 bit unsigned fixed point divisor in BARGB0
;
; Use: CALL FXD1507U
;
; Output: 15 bit unsigned fixed point quotient in AARGB0, AARGB1
; 7 bit unsigned fixed point remainder in REMB0
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 1+122+2 = 125 clks
;
; Min Timing: 1+122+2 = 125 clks
;
; PM: 1+122+1 = 124 DM: 4
;
FXD1507U CLRF REMB0, F
UDIV1507
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 8/8 Bit Signed Fixed Point Divide 08/08 -> 08.08
;
XORWF BARGB0,W
BTFSC WREG,MSB
COMF SIGN,F
BTFSS BARGB0,MSB
GOTO CA0808S
COMF BARGB0, F
INCF BARGB0, F
COMF AARGB0, F
INCF AARGB0, F
C0808S SDIV0808
COMF AARGB0, F
INCF AARGB0, F
COMF REMB0, F
INCF REMB0, F
;**********************************************************************************************
;**********************************************************************************************
;
; 8/8 Bit Unsigned Fixed Point Divide 08/08 -> 08.08
;
; Input: 8 bit unsigned fixed point dividend in AARGB0
; 8 bit unsigned fixed point divisor in BARGB0
;
; Use: CALL FXD0808U
;
; Output: 8 bit unsigned fixed point quotient in AARGB0
; 8 bit unsigned fixed point remainder in REMB0
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 1+72+2 = 75 clks
;
; Min Timing: 1+64+2 = 67 clks
;
; PM: 1+72+1 = 74 DM: 3
;
FXD0808U CLRF REMB0, F
UDIV0808
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 8/7 Bit Unsigned Fixed Point Divide 08/07 -> 08.07
;
; Input: 8 bit unsigned fixed point dividend in AARGB0
; 7 bit unsigned fixed point divisor in BARGB0
;
UDIV0807
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
; 7/7 Bit Unsigned Fixed Point Divide 07/07 -> 07.07
;
; Input: 7 bit unsigned fixed point dividend in AARGB0
; 7 bit unsigned fixed point divisor in BARGB0
;
; Use: CALL FXD0707U
;
; Output: 7 bit unsigned fixed point quotient in AARGB0
; 7 bit unsigned fixed point remainder in REMB0
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 1+58+2 = 61 clks
;
; Min Timing: 1+58+2 = 61 clks
;
; PM: 1+58+1 = 60 DM: 3
;
FXD0707U CLRF REMB0, F
UDIV0707
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
; $Revision: 2.4 $
;**********************************************************************************************
;**********************************************************************************************
;
; 32/16 Bit Division Macros
;
SDIV3216 macro
;
; Max Timing: 5+8+30*12+6 = 379 clks
;
; Min Timing: 5+8+30*11+6 = 349 clks
;
; PM: 5+8+30*14+6 = 439 DM: 8
;
variable i
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
RLCF AARGB0, F
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
ADDWF REMB1, F
variable i = D’2’
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO SADD26#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK26#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO SADD268
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK268
variable i = D’9’
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO SADD26#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK26#v(i)
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO SADD2616
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK2616
variable i = D’17’
RLCF AARGB2,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB2,LSB
GOTO SADD26#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK26#v(i)
variable i = i + 1
endw
RLCF AARGB3,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB2,LSB
GOTO SADD2624
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK2624
variable i = D’25’
RLCF AARGB3,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB3,LSB
GOTO SADD26#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK26#v(i)
variable i = i + 1
endw
BTFSC AARGB3,LSB
GOTO SOK26
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
SOK26
endm
UDIV3216 macro
;
; restore = 15/20 clks, nonrestore = 11/14 clks
;
; Max Timing: 16*15+1+16*20 = 561 clks
;
; Min Timing: 16*11+1+16*14 = 401 clks
;
; PM: 16*15+1+16*20 = 561 DM: 9
;
variable i
variable i = D’0’
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
BTFSC _C
GOTO UOK26#v(i)
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
BCF _C
variable i = i + 1
endw
variable i = D’8’
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
BTFSC _C
GOTO UOK26#v(i)
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
BCF _C
variable i = i + 1
endw
CLRF TEMP, F
variable i = D’16’
RLCF AARGB2,W
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
BTFSC _C
GOTO UOK26#v(i)
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
CLRF WREG, F
ADDWFC TEMP, F
BCF _C
variable i = i + 1
endw
variable i = D’24’
variable i = i + 1
endw
endm
NDIV3216 macro
;
; Max Timing: 10+31*15+6 = 481 clks
;
; Min Timing: 10+31*14+6 = 450 clks
;
; PM: 10+31*19+6 = 605 DM: 9
;
variable i
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF TEMP,W
SUBWFB TEMP, F
RLCF AARGB0, F
variable i = D’1’
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO NADD26#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK26#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO NADD268
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK268
variable i = D’9’
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO NADD26#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK26#v(i)
variable i = i + 1
endw
RLCF AARGB2,W
variable i = D’17’
RLCF AARGB2,W
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB1,WREG
BTFSS AARGB2,LSB
GOTO NADD26#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK26#v(i)
variable i = i + 1
endw
RLCF AARGB3,W
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB1,WREG
BTFSS AARGB2,LSB
GOTO NADD2624
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK2624
variable i = D’25’
RLCF AARGB3,W
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB1,WREG
BTFSS AARGB3,LSB
GOTO NADD26#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK26#v(i)
variable i = i + 1
endw
BTFSC AARGB3,LSB
GOTO NOK26
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
NOK26
endm
UDIV3215 macro
;
; Max Timing: 8+31*12+6 = 386 clks
;
; Min Timing: 8+31*11+6 = 355 clks
;
; PM: 8+31*14+6 = 448 DM: 8
;
variable i
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
RLCF AARGB0, F
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO UADD25#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK25#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO UADD258
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK258
variable i = D’9’
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO UADD25#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK25#v(i)
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO UADD2516
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK2516
variable i = D’17’
RLCF AARGB2,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB2,LSB
GOTO UADD25#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK25#v(i)
variable i = i + 1
endw
RLCF AARGB3,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB2,LSB
GOTO UADD2524
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK2524
variable i = D’25’
RLCF AARGB3,W
variable i = i + 1
endw
BTFSC AARGB3,LSB
GOTO UOK25
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
UOK25
endm
UDIV3115 macro
;
; Max Timing: 5+8+30*12+6 = 379 clks
;
; Min Timing: 5+8+30*11+6 = 349 clks
;
; PM: 5+8+30*14+6 = 439 DM: 8
;
variable i
MOVFP BARGB1,WREG
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
RLCF AARGB0, F
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
RLCF AARGB0, F
variable i = D’2’
RLCF AARGB0,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO UADD15#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB0,LSB
GOTO UADD158
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK158
variable i = D’9’
RLCF AARGB1,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO UADD15#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK15#v(i)
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB1,LSB
GOTO UADD1516
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
variable i = D’17’
RLCF AARGB2,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB2,LSB
GOTO UADD15#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK15#v(i)
variable i = i + 1
endw
RLCF AARGB3,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB2,LSB
GOTO UADD1524
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK1524
variable i = D’25’
RLCF AARGB3,W
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB1,WREG
BTFSS AARGB3,LSB
GOTO UADD15#v(i)
SUBWF REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK15#v(i)
variable i = i + 1
endw
BTFSC AARGB3,LSB
GOTO UOK15
MOVFP BARGB1,WREG
ADDWF REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
UOK15
endm
;**********************************************************************************************
;**********************************************************************************************
;
; 24/24 Bit Division Macros
;
SDIV2424 macro
;
; Max Timing: 7+11+22*15+8 = 356 clks
;
; Min Timing: 7+11+22*14+3 = 329 clks
;
; PM: 7+11+22*19+8 = 444 DM: 9
;
variable i
MOVFP BARGB2,WREG
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
RLCF AARGB0, F
RLCF AARGB0,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
ADDWF REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
RLCF AARGB0, F
variable i = D’2’
RLCF AARGB0,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB0,LSB
GOTO SADD44#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB0,LSB
GOTO SADD448
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK448
variable i = D’9’
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB1,LSB
GOTO SADD44#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK44#v(i)
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB1,LSB
GOTO SADD4416
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK4416
variable i = D’17’
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB2,LSB
GOTO SADD44#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO SOK44#v(i)
variable i = i + 1
endw
BTFSC AARGB2,LSB
GOTO SOK44
MOVFP BARGB2,WREG
ADDWF REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
endm
UDIV2424 macro
;
; restore = 20/25 clks, nonrestore = 14/17 clks
;
; Max Timing: 16*20+1+8*25 = 521 clks
;
; Min Timing: 16*14+1+8*17 = 361 clks
;
; PM: 16*20+1+8*25 = 521 DM: 10
;
variable i
variable i = 0
while i < 8
RLCF AARGB0,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
BTFSC _C
GOTO UOK44#v(i)
MOVFP BARGB2,WREG
ADDWF REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
BCF _C
variable i = i + 1
endw
variable i = D’8’
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
BTFSC _C
GOTO UOK44#v(i)
MOVFP BARGB2,WREG
ADDWF REMB2, F
MOVFP BARGB1,WREG
variable i = i + 1
endw
CLRF TEMP, F
variable i = D’16’
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB2,WREG
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
BTFSC _C
GOTO UOK44#v(i)
MOVFP BARGB2,WREG
ADDWF REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
CLRF WREG, F
ADDWFC TEMP, F
BCF _C
variable i = i + 1
endw
endm
NDIV2424 macro
;
; Max Timing: 13+23*18+8 = 435 clks
;
; Min Timing: 13+23*17+3 = 407 clks
;
; PM: 13+23*24+8 = 573 DM: 10
;
variable i
RLCF AARGB0,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
variable i = D’1’
RLCF AARGB0,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB2,WREG
BTFSS AARGB0,LSB
GOTO NADD44#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK44#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB2,WREG
BTFSS AARGB0,LSB
GOTO NADD448
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK448
variable i = D’9’
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB2,WREG
BTFSS AARGB1,LSB
GOTO NADD44#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK44#v(i)
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB2,WREG
BTFSS AARGB1,LSB
GOTO NADD4416
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK4416
variable i = D’17’
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
RLCF TEMP, F
MOVFP BARGB2,WREG
BTFSS AARGB2,LSB
GOTO NADD44#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
CLRF WREG, F
SUBWFB TEMP, F
GOTO NOK44#v(i)
variable i = i + 1
endw
BTFSC AARGB2,LSB
GOTO NOK44
MOVFP BARGB2,WREG
ADDWF REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
NOK44
endm
UDIV2423 macro
;
; Max Timing: 11+23*15+8 = 364 clks
;
; Min Timing: 11+23*14+3 = 336 clks
;
; PM: 11+23*19+8 = 456 DM: 9
;
variable i
RLCF AARGB0,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
SUBWF REMB2, F
MOVFP BARGB1,WREG
variable i = D’1’
RLCF AARGB0,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB0,LSB
GOTO UADD43#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK43#v(i)
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB0,LSB
GOTO UADD438
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK438
variable i = D’9’
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB1,LSB
GOTO UADD4316
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK4316
variable i = D’17’
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB2,LSB
GOTO UADD43#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK43#v(i)
variable i = i + 1
endw
BTFSC AARGB2,LSB
GOTO UOK43
MOVFP BARGB2,WREG
ADDWF REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
UOK43
endm
UDIV2323 macro
;
; Max Timing: 7+11+22*15+8 = 356 clks
;
; Min Timing: 7+11+22*14+3 = 329 clks
;
; PM: 7+11+22*19+8 = 444 DM: 9
;
variable i
MOVFP BARGB2,WREG
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
RLCF AARGB0, F
RLCF AARGB0,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
ADDWF REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
RLCF AARGB0, F
variable i = D’2’
RLCF AARGB0,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB0,LSB
GOTO UADD33#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
variable i = i + 1
endw
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB0,LSB
GOTO UADD338
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK338
variable i = D’9’
RLCF AARGB1,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB1,LSB
GOTO UADD33#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK33#v(i)
variable i = i + 1
endw
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB1,LSB
GOTO UADD3316
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK3316
variable i = D’17’
RLCF AARGB2,W
RLCF REMB2, F
RLCF REMB1, F
RLCF REMB0, F
MOVFP BARGB2,WREG
BTFSS AARGB2,LSB
GOTO UADD33#v(i)
SUBWF REMB2, F
MOVFP BARGB1,WREG
SUBWFB REMB1, F
MOVFP BARGB0,WREG
SUBWFB REMB0, F
GOTO UOK33#v(i)
variable i = i + 1
endw
BTFSC AARGB2,LSB
GOTO UOK33
MOVFP BARGB2,WREG
ADDWF REMB2, F
MOVFP BARGB1,WREG
ADDWFC REMB1, F
MOVFP BARGB0,WREG
ADDWFC REMB0, F
UOK33
;**********************************************************************************************
;**********************************************************************************************
;
; 32/16 Bit Signed Fixed Point Divide 32/16 -> 32.16
;
; Input: 32 bit signed fixed point dividend in AARGB0, AARGB1,AARGB2,AARGB3
; 16 bit unsigned fixed point divisor in BARGB0, BARGB1
;
; Use: CALL FXD3216S
;
; Output: 32 bit signed fixed point quotient in AARGB0, AARGB1,AARGB2,AARGB3
; 16 bit fixed point remainder in REMB0, REMB1
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 24+379+5 = 408 clks A > 0, B > 0
; 27+379+19 = 425 clks A > 0, B < 0
; 31+379+19 = 429 clks A < 0, B > 0
; 34+379+5 = 418 clks A < 0, B < 0
; 10 clks A = 0
;
; Min Timing: 24+349+5 = 378 clks A > 0, B > 0
; 27+349+19 = 395 clks A > 0, B < 0
; 31+349+19 = 399 clks A < 0, B > 0
; 34+349+5 = 388 clks A < 0, B < 0
;
; PM: 34+439+18+46 = 537 DM: 10
;
FXD3216S CLRF SIGN,F
CLRF REMB0,F ; clear partial remainder
CLRF REMB1,F
MOVPF AARGB0,WREG
IORWF AARGB1,W
IORWF AARGB2,W
IORWF AARGB3,W
BTFSC _Z
RETLW 0x00
MOVPF AARGB0,WREG
XORWF BARGB0,W
BTFSC WREG,MSB
COMF SIGN,F
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB1, F
ADDWFC BARGB0, F
COMF AARGB3, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB3, F
ADDWFC AARGB2, F
ADDWFC AARGB1, F
ADDWFC AARGB0, F
C3216S SDIV3216
COMF AARGB3, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
CLRF WREG, F
INCF AARGB3, F
ADDWFC AARGB2, F
ADDWFC AARGB1, F
ADDWFC AARGB0, F
COMF REMB1, F
COMF REMB0, F
INCF REMB1, F
ADDWFC REMB0, F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 32/16 Bit Unsigned Fixed Point Divide 32/16 -> 32.16
;
; Input: 32 bit unsigned fixed point dividend in AARGB0, AARGB1,AARGB2,AARGB3
; 16 bit unsigned fixed point divisor in BARGB0, BARGB1
;
; Use: CALL FXD3216U
;
; Output: 32 bit unsigned fixed point quotient in AARGB0, AARGB1AARGB2,AARGB3
; 16 bit unsigned fixed point remainder in REMB0, REMB1
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 2+481+2 = 485 clks
;
; Min Timing: 2+450+2 = 459 clks
;
; PM: 2+605+1 = 608 DM: 9
;
FXD3216U CLRF REMB0, F
CLRF REMB1, F
NDIV3216
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 32/15 Bit Unsigned Fixed Point Divide 32/15 -> 32.15
;
; Input: 32 bit unsigned fixed point dividend in AARGB0, AARGB1,AARGB2,AARGB3
; 15 bit unsigned fixed point divisor in BARGB0, BARGB1
;
; Use: CALL FXD3215U
;
; Output: 32 bit unsigned fixed point quotient in AARGB0, AARGB1
; 15 bit unsigned fixed point remainder in REMB0, REMB1
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 2+386+2 = 390 clks
;
; Min Timing: 2+355+2 = 359 clks
;
; PM: 2+448+1 = 451 DM: 8
;
UDIV3215
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 31/15 Bit Unsigned Fixed Point Divide 31/15 -> 31.15
;
; Input: 31 bit unsigned fixed point dividend in AARGB0, AARGB1,AARGB2,AARGB3
; 15 bit unsigned fixed point divisor in BARGB0, BARGB1
;
; Use: CALL FXD3115U
;
; Output: 31 bit unsigned fixed point quotient in AARGB0, AARGB1
; 15 bit unsigned fixed point remainder in REMB0, REMB1
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 2+379+2 = 383 clks
;
; Min Timing: 2+349+2 = 353 clks
;
; PM: 2+439+1 = 442 DM: 8
;
FXD3115U CLRF REMB0, F
CLRF REMB1, F
UDIV3115
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 24/24 Bit Signed Fixed Point Divide 24/24 -> 24.24
;
; Input: 24 bit signed fixed point dividend in AARGB0, AARGB1, AARGB2
; 24 bit unsigned fixed point divisor in BARGB0, BARGB1, BARGB2
;
; Use: CALL FXD2424S
;
; Output: 24 bit signed fixed point quotient in AARGB0, AARGB1, AARGB2
; 24 bit fixed point remainder in REMB0, REMB1, REMB2
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 24+356+5 = 385 clks A > 0, B > 0
; 29+356+19 = 404 clks A > 0, B < 0
; 29+356+19 = 404 clks A < 0, B > 0
; 34+356+5 = 395 clks A < 0, B < 0
; 10 clks A = 0
;
; Min Timing: 24+329+5 = 358 clks A > 0, B > 0
; 29+329+19 = 377 clks A > 0, B < 0
; 29+329+19 = 377 clks A < 0, B > 0
; 34+329+5 = 368 clks A < 0, B < 0
;
; PM: 34+444+18+44 = 540 DM: 11
;
FXD2424S CLRF SIGN,F
CLRF REMB0,F ; clear partial remainder
CLRF REMB1,F
MOVPF AARGB0,WREG
XORWF BARGB0,W
BTFSC WREG,MSB
COMF SIGN,F
COMF BARGB2, F
COMF BARGB1, F
COMF BARGB0, F
INCF BARGB2, F
ADDWFC BARGB1, F
ADDWFC BARGB0, F
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
INCF AARGB2, F
ADDWFC AARGB1, F
ADDWFC AARGB0, F
C2424S SDIV2424
COMF AARGB2, F
COMF AARGB1, F
COMF AARGB0, F
CLRF WREG, F
INCF AARGB2, F
ADDWFC AARGB1, F
ADDWFC AARGB0, F
COMF REMB2, F
COMF REMB1, F
COMF REMB0, F
INCF REMB2, F
ADDWFC REMB1, F
ADDWFC REMB0, F
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 24/24 Bit Unsigned Fixed Point Divide 24/24 -> 24.24
;
; Input: 24 bit unsigned fixed point dividend in AARGB0, AARGB1, AARGB2
; 24 bit unsigned fixed point divisor in BARGB0, BARGB1, BARGB2
;
; Use: CALL FXD2424U
;
; Output: 24 bit unsigned fixed point quotient in AARGB0, AARGB1, AARGB2
; 24 bit unsigned fixed point remainder in REMB0, REMB1, REMB2
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 3+435+2 = 440 clks
;
; Min Timing: 3+407+2 = 412 clks
;
NDIV2424
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 24/23 Bit Unsigned Fixed Point Divide 24/23 -> 24.23
;
; Input: 24 bit unsigned fixed point dividend in AARGB0, AARGB1, AARGB2
; 23 bit unsigned fixed point divisor in BARGB0, BARGB1, BARGB2
;
; Use: CALL FXD2423U
;
; Output: 24 bit unsigned fixed point quotient in AARGB0, AARGB1, AARGB2
; 23 bit unsigned fixed point remainder in REMB0, REMB1, REMB2
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 3+364+2 = 369 clks
;
; Min Timing: 3+336+2 = 341 clks
;
; PM: 3+456+1 = 460 DM: 9
;
FXD2423U CLRF REMB0, F
CLRF REMB1, F
CLRF REMB2, F
UDIV2423
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
;
; 23/23 Bit Unsigned Fixed Point Divide 23/23 -> 23.23
;
; Input: 23 bit unsigned fixed point dividend in AARGB0, AARGB1, AARGB2
; 23 bit unsigned fixed point divisor in BARGB0, BARGB1, BARGB2
;
; Use: CALL FXD2323U
;
; Output: 23 bit unsigned fixed point quotient in AARGB0, AARGB1, AARGB2
; 23 bit unsigned fixed point remainder in REMB0, REMB1, REMB2
;
; Result: AARG, REM <-- AARG / BARG
;
; Max Timing: 3+356+2 = 361 clks
;
; Min Timing: 3+329+2 = 334 clks
;
; PM: 3+444+1 = 448 DM: 9
;
FXD2323U CLRF REMB0, F
CLRF REMB1, F
CLRF REMB2, F
UDIV2323
RETLW 0x00
;**********************************************************************************************
;**********************************************************************************************
• The PICmicro family meets the specifications contained in the Microchip Data Sheet.
• Microchip believes that its family of PICmicro microcontrollers is one of the most secure products of its kind on the market today,
when used in the intended manner and under normal conditions.
• There are dishonest and possibly illegal methods used to breach the code protection feature. All of these methods, to our knowl-
edge, require using the PICmicro microcontroller in a manner outside the operating specifications contained in the data sheet.
The person doing so may be engaged in theft of intellectual property.
• Microchip is willing to work with the customer who is concerned about the integrity of their code.
• Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code. Code protection does not
mean that we are guaranteeing the product as “unbreakable”.
• Code protection is constantly evolving. We at Microchip are committed to continuously improving the code protection features of
our product.
If you have any further questions about this matter, please contact the local sales office nearest to you.
01/18/02