OpenCores
URL https://opencores.org/ocsvn/ssbcc/ssbcc/trunk

Subversion Repositories ssbcc

[/] [ssbcc/] [trunk/] [lib/] [9x8/] [math.s] - Blame information for rev 10

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 10 sinclairrf
; Copyright 2014-2015, Sinclair R.F., Inc.
2 2 sinclairrf
;
3 4 sinclairrf
; Unsigned arithmetic operations.
4 2 sinclairrf
 
5 10 sinclairrf
.IFNDEF D__INCLUDED__MATH_S__
6
.define D__INCLUDED__MATH_S__
7
 
8 7 sinclairrf
; Notation:
9
;   ux_n is the n'th byte of ux where n=0 is the LSB
10
;         example:  ( u0_0 u0_1 ) are the LSB and MSB of a 2-byte 16-bit value.
11
;   u0 and u1 are two input vectors, us is their sum
12
 
13 4 sinclairrf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
14
;
15
; Add two unsigned 8-bit values to produce an unsigned 16-bit value.
16 7 sinclairrf
; Method:  calculate and push the carry bit onto the return stack, calculate the
17
;          8-bit sum of the two 8-bit values, use the previously stored and
18
;          computed carry bit as the MSB of the 16-bit return value.
19
; 6 instructions
20 4 sinclairrf
;
21 7 sinclairrf
; ( u0 u1 - us_0 us_1 )
22 4 sinclairrf
.function math__add_u8_u8_u16
23 7 sinclairrf
  ; ( u_0 u_1 - u_0 u_1 ) r:( - c )
24
  ; ( u0 u1 - us_0 us_1 )
25
  +c >r + r>
26
  .return
27 2 sinclairrf
 
28 4 sinclairrf
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
29
; miscellaneous unsigned addition operations
30 2 sinclairrf
 
31 7 sinclairrf
; ( u0_0 u0_1  u0 - us_0 us_1 )
32
; 9 instructions
33 4 sinclairrf
.function math__add_u16_u8_u16
34 7 sinclairrf
  ; ( u0_0 u0_1 u1 - u0_0 u1 ) r:( - u0_1  )
35
  swap >r
36
  ; ( u0_0 u1 - us_0 c_0 )
37
  +c >r + r>
38
  ; ( c_0 - us_1 ) r:( u0_1 )
39
  r> .return(+)
40 2 sinclairrf
 
41 7 sinclairrf
; ( u0_0 u0_1 u1 - us_0 us_1 us_2 )
42
; 13 instructions
43 4 sinclairrf
.function math__add_u16_u8_u24
44 7 sinclairrf
  ; ( u0_0 u0_1 u1 - u0_0 u1 ) r:( - u0_1 )
45
  swap >r
46
  ; ( u0_0 u1 - us_0 c_0 )
47
  +c >r + r>
48
  ; ( c_0 - us_1 us_2 ) r:( u0_1  - )
49
  r> +c >r + r>
50
  .return
51 2 sinclairrf
 
52 7 sinclairrf
; ( u0_0 u0_1 u0_2 u1 - us_0 us_1 us_2 )
53 4 sinclairrf
.function math__add_u24_u8_u24
54
  swap >r .call(math__add_u16_u8_u24)
55
  r> .return(+)
56 2 sinclairrf
 
57 7 sinclairrf
; ( u0_0 u0_1 u0_2 u1 - us_0 us_1 us_2 us_3 )
58 4 sinclairrf
.function math__add_u24_u8_u32
59
  swap >r .call(math__add_u16_u8_u24)
60
  r> .call(math__add_u8_u8_u16)
61
  .return
62 2 sinclairrf
 
63 4 sinclairrf
.function math__add_u32_u8_u32
64
  swap >r .call(math__add_u24_u8_u32)
65
  r> .return(+)
66 2 sinclairrf
 
67 4 sinclairrf
.function math__add_u32_u16_u32
68
  >r .call(math__add_u32_u8_u32)
69
  r> .call(math__add_u24_u8_u24)
70
  .return
71 2 sinclairrf
 
72 4 sinclairrf
.function math__add_u32_u24_u32
73
  >r .call(math__add_u32_u16_u32)
74
  r> .call(math__add_u16_u8_u16)
75
  .return
76 2 sinclairrf
 
77 4 sinclairrf
.function math__add_u32_u32_u32
78
  >r .call(math__add_u32_u24_u32)
79
  r> .return(+)
80 10 sinclairrf
 
81
.ENDIF ; D__INCLUDED__MATH_S__

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.