Permalink
Browse files

huge refactoring

MAJOR refactoring in memmanager. Optimized object handles from 5 words
to 4 and gc speed improved. Fixed float pow bug.
  • Loading branch information...
orlof
orlof committed Jan 2, 2013
1 parent 28abb3c commit f4fe016ed84154845506f4f735f75cbaadc61ab6
Showing with 892 additions and 803 deletions.
  1. +104 −8 array.dasm16
  2. +88 −64 data.dasm16
  3. +33 −15 defs.dasm16
  4. +199 −0 dict.dasm16
  5. +17 −11 edit.dasm16
  6. +35 −70 float.dasm16
  7. +46 −54 integer.dasm16
  8. +9 −8 interpreter.dasm16
  9. +89 −8 lexer2.dasm16
  10. +22 −300 list.dasm16
  11. +213 −217 memory.dasm16
  12. +28 −40 parser.dasm16
  13. +3 −4 stdlib.dasm16
  14. +6 −4 string2.dasm16
View
@@ -1,3 +1,43 @@
+;----------------------------------------------------------------
+; struct handle *array_create(uint16 len, uint16 type)
+; ugly hack to mimic call conventions
+;----------------------------------------------------------------
+:array_create2
+ set push, a
+
+ set push, [sp + 3] ; size
+ add [sp], 1
+ set push, [sp + 3] ; type
+ jsr alloc
+
+ set a, [x]
+ set [a], [sp + 3]
+
+ ; restore stack
+ set a, pop
+ set [sp], pop
+ set [sp], pop
+
+ set pc, pop
+
+:array_create
+ set push, [sp + 2] ; size
+ add [sp], 1
+ set push, [sp + 2] ; type
+ jsr alloc
+
+ set push, x
+
+ set x, [x]
+ set [x], [sp + 3]
+
+ ; restore stack
+ set x, pop
+ set [sp], pop
+ set [sp], pop
+
+ set pc, pop
+
;----------------------------------------------------------------
:array_get
; fastcall
@@ -88,8 +128,8 @@
set push, 0
jsr preamble
- set a, [z+12] ; handle *
- set b, [a] ; array *
+ set a, [z+12] ; struct handle *
+ set b, [a] ; struct array *
; check range
set c, [z+11]
@@ -106,11 +146,10 @@
set pc, array_insert_prepare
; increase list capacity
- add i, 10 ; increase capacity
+ add i, 11 ; increase capacity
set push, a
set push, i
- set push, [a+1]
jsr realloc
set b, [a] ; realloc has moved the memory
@@ -160,7 +199,7 @@
set push, y
set push, [a + HANDLE_TYPE]
- jsr alloc
+ jsr array_create
set [z+-1], x
add j, b
@@ -194,7 +233,7 @@
set push, c
set push, [b + HANDLE_TYPE]
- jsr alloc
+ jsr array_create
set [z+-1], x ; struct handle *result
set i, [x] ; struct string *result
@@ -287,7 +326,7 @@
set push, y
set push, [a + HANDLE_TYPE]
- jsr alloc
+ jsr array_create
set c, [x] ; struct list *
set [c], y ; set size
@@ -367,7 +406,7 @@
set push, [i]
set push, [a + HANDLE_TYPE]
- jsr alloc
+ jsr array_create
set j, [x]
set c, i
@@ -380,3 +419,60 @@
set [j], [i]
sti pc, array_clone_loop
+;----------------------------------------------------------------
+; void array_map(struct handle *array, *function map)
+;----------------------------------------------------------------
+:array_map
+ set push, 2
+ set push, 0
+ jsr preamble
+
+ set a, [z + 11] ; struct handle *array
+ set b, [z + 10] ; *map()
+
+ set c, [a]
+ sti i, c
+ add c, [c]
+
+:array_map__loop
+ ifg i, c
+ set pc, postamble
+
+ set push, [i]
+ jsr b
+
+ sti pc, array_map__loop
+
+;----------------------------------------------------------------
+; void array_find(struct handle *array, void item, *compare_function)
+;----------------------------------------------------------------
+:array_find
+ set push, 3
+ set push, 0
+ jsr preamble
+
+ set a, [z + 12] ; struct handle *array
+ set b, [z + 11] ; item
+ set c, [z + 10] ; compare_function*
+
+ set y, [a] ; struct array *
+ sti j, y ; ptr to current item
+
+ add y, [y] ; ptr to last item
+
+ set i, 0 ; index
+
+:array_find__loop
+ set x, -1
+ ifg j, y
+ set pc, postamble
+
+ set push, [j]
+ set push, b
+ jsr c
+
+ ifn x, 0
+ sti pc, array_find__loop
+
+ set x, i
+ jsr postamble
View
@@ -14,9 +14,9 @@
;----------------------------------------------------------------
:current_screen dat screen_first
-:screen_first dat 0xc000, 0xc180, 0xc000
- dat 0xc180, 0xc300, 0xc180
-:screen_last dat 0xc300, 0xc480, 0xc300
+:screen_first dat 0xd000, 0xd180, 0xd000
+ dat 0xd180, 0xd300, 0xd180
+:screen_last dat 0xd300, 0xd480, 0xd300
;----------------------------------------------------------------
@@ -44,13 +44,13 @@
;----------------------------------------------------------------
; GLOBAL HEAP MANAGEMENT VARIABLES
;----------------------------------------------------------------
-:heap_start DAT 0
-:heap_end DAT 0
-:heap_free_start DAT 0
-:heap_handle_start DAT 0
-:heap_zero DAT 0
-:heap_free_list DAT 0
-:heap_alloc_counter DAT 0
+:heap_counter DAT 0
+:heap_free_start DAT HEAP_START
+
+:heap_handle_start DAT HEAP_END
+:heap_handle_head DAT 0
+:heap_handle_tail DAT heap_handle_head - HANDLE_NEXT
+:heap_handle_free DAT 0
;----------------------------------------------------------------
; GLOBAL LEXER VARIABLES
@@ -139,6 +139,30 @@
:INT_VALUE_15 dat 0x0001, 0x000F
:INT_VALUE_16 dat 0x0001, 0x0010
+:FLOAT_NAN DAT 0
+:FLOAT_PINF DAT 0
+:FLOAT_NINF DAT 0
+:FLOAT_PZERO DAT 0
+:FLOAT_NZERO DAT 0
+
+:FLOAT_0 DAT 0
+:FLOAT_1 DAT 0
+:FLOAT_2 DAT 0
+:FLOAT_3 DAT 0
+:FLOAT_4 DAT 0
+:FLOAT_5 DAT 0
+:FLOAT_6 DAT 0
+:FLOAT_7 DAT 0
+:FLOAT_8 DAT 0
+:FLOAT_9 DAT 0
+:FLOAT_10 DAT 0
+
+:STR_PINF DAT STR_PINF+2, TYPE_STRING, 3, "inf"
+:STR_NINF DAT STR_NINF+2, TYPE_STRING, 4, "-inf"
+:STR_PZERO DAT STR_PZERO+2, TYPE_STRING, 3, "0.0"
+:STR_NZERO DAT STR_NZERO+2, TYPE_STRING, 4, "-0.0"
+:STR_NAN DAT STR_NAN+2, TYPE_STRING, 3, "nan"
+
;----------------------------------------------------------------
; TOKENS
;----------------------------------------------------------------
@@ -339,7 +363,7 @@
DAT lexer_char_exclamation ; 33 ! (exclamation mark)
DAT lexer_char_quotationmark ; 34 " (double quote)
DAT lexer_char_comment ; 35 # (number sign)
- DAT lexer_char_letter_lc ; 36 $ (dollar sign)
+ DAT lexer_char_letter ; 36 $ (dollar sign)
DAT lexer_char_percent ; 37 % (percent)
DAT lexer_char_ambersand ; 38 & (ampersand)
DAT lexer_char_quotationmark ; 39 ' (single quote)
@@ -368,64 +392,64 @@
DAT lexer_char_greater ; 62 > (greater than sign)
DAT lexer_char_questionmark ; 63 ? (question mark)
DAT recover ; 64 @ (AT symbol)
- DAT lexer_char_letter_uc ; 65 A
- DAT lexer_char_letter_uc ; 66 B
- DAT lexer_char_letter_uc ; 67 C
- DAT lexer_char_letter_uc ; 68 D
- DAT lexer_char_letter_uc ; 69 E
- DAT lexer_char_letter_uc ; 70 F
- DAT lexer_char_letter_uc ; 71 G
- DAT lexer_char_letter_uc ; 72 H
- DAT lexer_char_letter_uc ; 73 I
- DAT lexer_char_letter_uc ; 74 J
- DAT lexer_char_letter_uc ; 75 K
- DAT lexer_char_letter_uc ; 76 L
- DAT lexer_char_letter_uc ; 77 M
- DAT lexer_char_letter_uc ; 78 N
- DAT lexer_char_letter_uc ; 79 O
- DAT lexer_char_letter_uc ; 80 P
- DAT lexer_char_letter_uc ; 81 Q
- DAT lexer_char_letter_uc ; 82 R
- DAT lexer_char_letter_uc ; 83 S
- DAT lexer_char_letter_uc ; 84 T
- DAT lexer_char_letter_uc ; 85 U
- DAT lexer_char_letter_uc ; 86 V
- DAT lexer_char_letter_uc ; 87 W
- DAT lexer_char_letter_uc ; 88 X
- DAT lexer_char_letter_uc ; 89 Y
- DAT lexer_char_letter_uc ; 90 Z
+ DAT lexer_char_letter ; 65 A
+ DAT lexer_char_letter ; 66 B
+ DAT lexer_char_letter ; 67 C
+ DAT lexer_char_letter ; 68 D
+ DAT lexer_char_letter ; 69 E
+ DAT lexer_char_letter ; 70 F
+ DAT lexer_char_letter ; 71 G
+ DAT lexer_char_letter ; 72 H
+ DAT lexer_char_letter ; 73 I
+ DAT lexer_char_letter ; 74 J
+ DAT lexer_char_letter ; 75 K
+ DAT lexer_char_letter ; 76 L
+ DAT lexer_char_letter ; 77 M
+ DAT lexer_char_letter ; 78 N
+ DAT lexer_char_letter ; 79 O
+ DAT lexer_char_letter ; 80 P
+ DAT lexer_char_letter ; 81 Q
+ DAT lexer_char_letter ; 82 R
+ DAT lexer_char_letter ; 83 S
+ DAT lexer_char_letter ; 84 T
+ DAT lexer_char_letter ; 85 U
+ DAT lexer_char_letter ; 86 V
+ DAT lexer_char_letter ; 87 W
+ DAT lexer_char_letter ; 88 X
+ DAT lexer_char_letter ; 89 Y
+ DAT lexer_char_letter ; 90 Z
DAT lexer_char_lbrack ; 91 [ (left opening bracket)
DAT recover ; 92 \ (back slash)
DAT lexer_char_rbrack ; 93 ] (right closing bracket)
DAT lexer_char_caret ; 94 ^ (caret cirumflex)
- DAT recover ; 95 _ (underscore)
+ DAT lexer_char_letter ; 95 _ (underscore)
DAT recover ; 96 `
- DAT lexer_char_letter_lc ; 97 a
- DAT lexer_char_letter_lc ; 98 b
- DAT lexer_char_letter_lc ; 99 c
- DAT lexer_char_letter_lc ; 100 d
- DAT lexer_char_letter_lc ; 101 e
- DAT lexer_char_letter_lc ; 102 f
- DAT lexer_char_letter_lc ; 103 g
- DAT lexer_char_letter_lc ; 104 h
- DAT lexer_char_letter_lc ; 105 i
- DAT lexer_char_letter_lc ; 106 j
- DAT lexer_char_letter_lc ; 107 k
- DAT lexer_char_letter_lc ; 108 l
- DAT lexer_char_letter_lc ; 109 m
- DAT lexer_char_letter_lc ; 110 n
- DAT lexer_char_letter_lc ; 111 o
- DAT lexer_char_letter_lc ; 112 p
- DAT lexer_char_letter_lc ; 113 q
- DAT lexer_char_letter_lc ; 114 r
- DAT lexer_char_letter_lc ; 115 s
- DAT lexer_char_letter_lc ; 116 t
- DAT lexer_char_letter_lc ; 117 u
- DAT lexer_char_letter_lc ; 118 v
- DAT lexer_char_letter_lc ; 119 w
- DAT lexer_char_letter_lc ; 120 x
- DAT lexer_char_letter_lc ; 121 y
- DAT lexer_char_letter_lc ; 122 z
+ DAT lexer_char_letter ; 97 a
+ DAT lexer_char_letter ; 98 b
+ DAT lexer_char_letter ; 99 c
+ DAT lexer_char_letter ; 100 d
+ DAT lexer_char_letter ; 101 e
+ DAT lexer_char_letter ; 102 f
+ DAT lexer_char_letter ; 103 g
+ DAT lexer_char_letter ; 104 h
+ DAT lexer_char_letter ; 105 i
+ DAT lexer_char_letter ; 106 j
+ DAT lexer_char_letter ; 107 k
+ DAT lexer_char_letter ; 108 l
+ DAT lexer_char_letter ; 109 m
+ DAT lexer_char_letter ; 110 n
+ DAT lexer_char_letter ; 111 o
+ DAT lexer_char_letter ; 112 p
+ DAT lexer_char_letter ; 113 q
+ DAT lexer_char_letter ; 114 r
+ DAT lexer_char_letter ; 115 s
+ DAT lexer_char_letter ; 116 t
+ DAT lexer_char_letter ; 117 u
+ DAT lexer_char_letter ; 118 v
+ DAT lexer_char_letter ; 119 w
+ DAT lexer_char_letter ; 120 x
+ DAT lexer_char_letter ; 121 y
+ DAT lexer_char_letter ; 122 z
DAT lexer_char_lcurly ; 123 { (left opening brace)
DAT lexer_char_vbar ; 124 | (vertical bar)
DAT lexer_char_rcurly ; 125 } (right closing brace)
Oops, something went wrong.

0 comments on commit f4fe016

Please sign in to comment.