Changeset 98e4507 in mainline for uspace/lib
- Timestamp:
- 2011-05-20T01:13:40Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/fix-logger-deadlock, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 5c460cc
- Parents:
- a0bb65af (diff), 326bf65 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- uspace/lib
- Files:
-
- 2 added
- 29 edited
-
c/Makefile (modified) (1 diff)
-
c/arch/ia32/Makefile.common (modified) (1 diff)
-
c/generic/adt/prodcons.c (added)
-
c/generic/as.c (modified) (3 diffs)
-
c/generic/event.c (modified) (1 diff)
-
c/generic/malloc.c (modified) (24 diffs)
-
c/include/adt/fifo.h (modified) (1 diff)
-
c/include/adt/list.h (modified) (11 diffs)
-
c/include/adt/measured_strings.h (modified) (1 diff)
-
c/include/adt/prodcons.h (added)
-
c/include/as.h (modified) (1 diff)
-
c/include/event.h (modified) (1 diff)
-
c/include/fibril.h (modified) (1 diff)
-
softfloat/generic/add.c (modified) (4 diffs)
-
softfloat/generic/common.c (modified) (3 diffs)
-
softfloat/generic/comparison.c (modified) (3 diffs)
-
softfloat/generic/div.c (modified) (2 diffs)
-
softfloat/generic/mul.c (modified) (2 diffs)
-
softfloat/generic/other.c (modified) (1 diff)
-
softfloat/generic/softfloat.c (modified) (2 diffs)
-
softfloat/generic/sub.c (modified) (3 diffs)
-
softfloat/include/add.h (modified) (2 diffs)
-
softfloat/include/common.h (modified) (2 diffs)
-
softfloat/include/comparison.h (modified) (2 diffs)
-
softfloat/include/conversion.h (modified) (2 diffs)
-
softfloat/include/div.h (modified) (2 diffs)
-
softfloat/include/mul.h (modified) (2 diffs)
-
softfloat/include/other.h (modified) (2 diffs)
-
softfloat/include/sftypes.h (modified) (3 diffs)
-
softfloat/include/softfloat.h (modified) (2 diffs)
-
softfloat/include/sub.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/Makefile
ra0bb65af r98e4507 108 108 generic/adt/measured_strings.c \ 109 109 generic/adt/char_map.c \ 110 generic/adt/prodcons.c \ 110 111 generic/time.c \ 111 112 generic/stdlib.c \ -
uspace/lib/c/arch/ia32/Makefile.common
ra0bb65af r98e4507 28 28 29 29 CLANG_ARCH = i386 30 GCC_CFLAGS += -march=pentium 30 GCC_CFLAGS += -march=pentium -fno-omit-frame-pointer 31 31 32 32 ENDIANESS = LE -
uspace/lib/c/generic/as.c
ra0bb65af r98e4507 51 51 * 52 52 */ 53 void *as_area_create(void *address, size_t size, int flags)53 void *as_area_create(void *address, size_t size, unsigned int flags) 54 54 { 55 55 return (void *) __SYSCALL3(SYS_AS_AREA_CREATE, (sysarg_t) address, … … 67 67 * 68 68 */ 69 int as_area_resize(void *address, size_t size, int flags)69 int as_area_resize(void *address, size_t size, unsigned int flags) 70 70 { 71 71 return __SYSCALL3(SYS_AS_AREA_RESIZE, (sysarg_t) address, … … 95 95 * 96 96 */ 97 int as_area_change_flags(void *address, int flags)97 int as_area_change_flags(void *address, unsigned int flags) 98 98 { 99 99 return __SYSCALL2(SYS_AS_AREA_CHANGE_FLAGS, (sysarg_t) address, -
uspace/lib/c/generic/event.c
ra0bb65af r98e4507 41 41 #include <kernel/ipc/event_types.h> 42 42 43 /** Subscribe forevent notifications.43 /** Subscribe event notifications. 44 44 * 45 * @param evno Event number.46 * @param method Use thismethod for notifying me.45 * @param evno Event type to subscribe. 46 * @param imethod Use this interface and method for notifying me. 47 47 * 48 48 * @return Value returned by the kernel. 49 * 49 50 */ 50 int event_subscribe(event_type_t e , sysarg_tmethod)51 int event_subscribe(event_type_t evno, sysarg_t imethod) 51 52 { 52 return __SYSCALL2(SYS_EVENT_SUBSCRIBE, (sysarg_t) e, (sysarg_t) method); 53 return __SYSCALL2(SYS_EVENT_SUBSCRIBE, (sysarg_t) evno, 54 (sysarg_t) imethod); 55 } 56 57 /** Unmask event notifications. 58 * 59 * @param evno Event type to unmask. 60 * 61 * @return Value returned by the kernel. 62 * 63 */ 64 int event_unmask(event_type_t evno) 65 { 66 return __SYSCALL1(SYS_EVENT_UNMASK, (sysarg_t) evno); 53 67 } 54 68 -
uspace/lib/c/generic/malloc.c
ra0bb65af r98e4507 65 65 #define BASE_ALIGN 16 66 66 67 /** Heap shrink granularity 68 * 69 * Try not to pump and stress the heap to much 70 * by shrinking and enlarging it too often. 71 * A heap area won't shrunk if it the released 72 * free block is smaller than this constant. 73 * 74 */ 75 #define SHRINK_GRANULARITY (64 * PAGE_SIZE) 76 67 77 /** Overhead of each heap block. */ 68 78 #define STRUCT_OVERHEAD \ … … 86 96 * 87 97 */ 88 #define AREA_FIRST_BLOCK (area) \98 #define AREA_FIRST_BLOCK_HEAD(area) \ 89 99 (ALIGN_UP(((uintptr_t) (area)) + sizeof(heap_area_t), BASE_ALIGN)) 100 101 /** Get last block in heap area. 102 * 103 */ 104 #define AREA_LAST_BLOCK_FOOT(area) \ 105 (((uintptr_t) (area)->end) - sizeof(heap_block_foot_t)) 106 107 /** Get header in heap block. 108 * 109 */ 110 #define BLOCK_HEAD(foot) \ 111 ((heap_block_head_t *) \ 112 (((uintptr_t) (foot)) + sizeof(heap_block_foot_t) - (foot)->size)) 90 113 91 114 /** Get footer in heap block. … … 94 117 #define BLOCK_FOOT(head) \ 95 118 ((heap_block_foot_t *) \ 96 (((uintptr_t) head) + head->size - sizeof(heap_block_foot_t)))119 (((uintptr_t) (head)) + (head)->size - sizeof(heap_block_foot_t))) 97 120 98 121 /** Heap area. … … 115 138 void *end; 116 139 140 /** Previous heap area */ 141 struct heap_area *prev; 142 117 143 /** Next heap area */ 118 144 struct heap_area *next; … … 212 238 /** Check a heap area structure 213 239 * 240 * Should be called only inside the critical section. 241 * 214 242 * @param addr Address of the heap area. 215 243 * … … 220 248 221 249 assert(area->magic == HEAP_AREA_MAGIC); 250 assert(addr == area->start); 222 251 assert(area->start < area->end); 223 252 assert(((uintptr_t) area->start % PAGE_SIZE) == 0); … … 227 256 /** Create new heap area 228 257 * 229 * @param start Preffered starting address of the new area. 230 * @param size Size of the area. 258 * Should be called only inside the critical section. 259 * 260 * @param size Size of the area. 231 261 * 232 262 */ … … 248 278 249 279 area->start = astart; 250 area->end = (void *) 251 ALIGN_DOWN((uintptr_t) astart + asize, BASE_ALIGN);280 area->end = (void *) ((uintptr_t) astart + asize); 281 area->prev = NULL; 252 282 area->next = NULL; 253 283 area->magic = HEAP_AREA_MAGIC; 254 284 255 void *block = (void *) AREA_FIRST_BLOCK (area);285 void *block = (void *) AREA_FIRST_BLOCK_HEAD(area); 256 286 size_t bsize = (size_t) (area->end - block); 257 287 … … 262 292 last_heap_area = area; 263 293 } else { 294 area->prev = last_heap_area; 264 295 last_heap_area->next = area; 265 296 last_heap_area = area; … … 271 302 /** Try to enlarge a heap area 272 303 * 304 * Should be called only inside the critical section. 305 * 273 306 * @param area Heap area to grow. 274 * @param size Gross size of item to allocate (bytes). 307 * @param size Gross size to grow (bytes). 308 * 309 * @return True if successful. 275 310 * 276 311 */ … … 282 317 area_check(area); 283 318 284 size_t asize = ALIGN_UP((size_t) (area->end - area->start) + size,285 PAGE_SIZE);286 287 319 /* New heap area size */ 288 void *end = (void *) 289 ALIGN_DOWN((uintptr_t) area->start + asize, BASE_ALIGN); 320 size_t gross_size = (size_t) (area->end - area->start) + size; 321 size_t asize = ALIGN_UP(gross_size, PAGE_SIZE); 322 void *end = (void *) ((uintptr_t) area->start + asize); 290 323 291 324 /* Check for overflow */ … … 299 332 300 333 /* Add new free block */ 301 block_init(area->end, (size_t) (end - area->end), true, area); 334 size_t net_size = (size_t) (end - area->end); 335 if (net_size > 0) 336 block_init(area->end, net_size, true, area); 302 337 303 338 /* Update heap area parameters */ … … 309 344 /** Try to enlarge any of the heap areas 310 345 * 346 * Should be called only inside the critical section. 347 * 311 348 * @param size Gross size of item to allocate (bytes). 312 349 * … … 318 355 319 356 /* First try to enlarge some existing area */ 320 heap_area_t *area;321 for (area = first_heap_area; area != NULL;area = area->next) {357 for (heap_area_t *area = first_heap_area; area != NULL; 358 area = area->next) { 322 359 if (area_grow(area, size)) 323 360 return true; … … 325 362 326 363 /* Eventually try to create a new area */ 327 return area_create(AREA_FIRST_BLOCK(size)); 328 } 329 330 /** Try to shrink heap space 331 * 364 return area_create(AREA_FIRST_BLOCK_HEAD(size)); 365 } 366 367 /** Try to shrink heap 368 * 369 * Should be called only inside the critical section. 332 370 * In all cases the next pointer is reset. 333 371 * 334 */ 335 static void heap_shrink(void) 336 { 372 * @param area Last modified heap area. 373 * 374 */ 375 static void heap_shrink(heap_area_t *area) 376 { 377 area_check(area); 378 379 heap_block_foot_t *last_foot = 380 (heap_block_foot_t *) AREA_LAST_BLOCK_FOOT(area); 381 heap_block_head_t *last_head = BLOCK_HEAD(last_foot); 382 383 block_check((void *) last_head); 384 assert(last_head->area == area); 385 386 if (last_head->free) { 387 /* 388 * The last block of the heap area is 389 * unused. The area might be potentially 390 * shrunk. 391 */ 392 393 heap_block_head_t *first_head = 394 (heap_block_head_t *) AREA_FIRST_BLOCK_HEAD(area); 395 396 block_check((void *) first_head); 397 assert(first_head->area == area); 398 399 size_t shrink_size = ALIGN_DOWN(last_head->size, PAGE_SIZE); 400 401 if (first_head == last_head) { 402 /* 403 * The entire heap area consists of a single 404 * free heap block. This means we can get rid 405 * of it entirely. 406 */ 407 408 heap_area_t *prev = area->prev; 409 heap_area_t *next = area->next; 410 411 if (prev != NULL) { 412 area_check(prev); 413 prev->next = next; 414 } else 415 first_heap_area = next; 416 417 if (next != NULL) { 418 area_check(next); 419 next->prev = prev; 420 } else 421 last_heap_area = prev; 422 423 as_area_destroy(area->start); 424 } else if (shrink_size >= SHRINK_GRANULARITY) { 425 /* 426 * Make sure that we always shrink the area 427 * by a multiple of page size and update 428 * the block layout accordingly. 429 */ 430 431 size_t asize = (size_t) (area->end - area->start) - shrink_size; 432 void *end = (void *) ((uintptr_t) area->start + asize); 433 434 /* Resize the address space area */ 435 int ret = as_area_resize(area->start, asize, 0); 436 if (ret != EOK) 437 abort(); 438 439 /* Update heap area parameters */ 440 area->end = end; 441 442 /* Update block layout */ 443 void *last = (void *) last_head; 444 size_t excess = (size_t) (area->end - last); 445 446 if (excess > 0) { 447 if (excess >= STRUCT_OVERHEAD) { 448 /* 449 * The previous block cannot be free and there 450 * is enough free space left in the area to 451 * create a new free block. 452 */ 453 block_init(last, excess, true, area); 454 } else { 455 /* 456 * The excess is small. Therefore just enlarge 457 * the previous block. 458 */ 459 heap_block_foot_t *prev_foot = (heap_block_foot_t *) 460 (((uintptr_t) last_head) - sizeof(heap_block_foot_t)); 461 heap_block_head_t *prev_head = BLOCK_HEAD(prev_foot); 462 463 block_check((void *) prev_head); 464 465 block_init(prev_head, prev_head->size + excess, 466 prev_head->free, area); 467 } 468 } 469 } 470 } 471 337 472 next = NULL; 338 473 } … … 398 533 { 399 534 area_check((void *) area); 400 assert((void *) first_block >= (void *) AREA_FIRST_BLOCK (area));535 assert((void *) first_block >= (void *) AREA_FIRST_BLOCK_HEAD(area)); 401 536 assert((void *) first_block < area->end); 402 537 403 heap_block_head_t *cur; 404 for (cur = first_block; (void *) cur < area->end; 538 for (heap_block_head_t *cur = first_block; (void *) cur < area->end; 405 539 cur = (heap_block_head_t *) (((void *) cur) + cur->size)) { 406 540 block_check(cur); … … 436 570 * data in (including alignment). 437 571 */ 438 if ((void *) cur > (void *) AREA_FIRST_BLOCK (area)) {572 if ((void *) cur > (void *) AREA_FIRST_BLOCK_HEAD(area)) { 439 573 /* 440 574 * There is a block before the current block. … … 496 630 size_t reduced_size = cur->size - excess; 497 631 cur = (heap_block_head_t *) 498 (AREA_FIRST_BLOCK (area) + excess);632 (AREA_FIRST_BLOCK_HEAD(area) + excess); 499 633 500 block_init((void *) AREA_FIRST_BLOCK (area), excess,501 true, area);634 block_init((void *) AREA_FIRST_BLOCK_HEAD(area), 635 excess, true, area); 502 636 block_init(cur, reduced_size, true, area); 503 637 split_mark(cur, real_size); … … 552 686 553 687 /* Search the entire heap */ 554 heap_area_t *area;555 for (area = first_heap_area; area != NULL;area = area->next) {688 for (heap_area_t *area = first_heap_area; area != NULL; 689 area = area->next) { 556 690 heap_block_head_t *first = (heap_block_head_t *) 557 AREA_FIRST_BLOCK (area);691 AREA_FIRST_BLOCK_HEAD(area); 558 692 559 693 void *addr = malloc_area(area, first, split, real_size, … … 657 791 658 792 area_check(area); 659 assert((void *) head >= (void *) AREA_FIRST_BLOCK (area));793 assert((void *) head >= (void *) AREA_FIRST_BLOCK_HEAD(area)); 660 794 assert((void *) head < area->end); 661 795 … … 675 809 block_init((void *) head + real_size, 676 810 orig_size - real_size, true, area); 677 heap_shrink( );811 heap_shrink(area); 678 812 } 679 813 … … 734 868 735 869 area_check(area); 736 assert((void *) head >= (void *) AREA_FIRST_BLOCK (area));870 assert((void *) head >= (void *) AREA_FIRST_BLOCK_HEAD(area)); 737 871 assert((void *) head < area->end); 738 872 … … 751 885 752 886 /* Look at the previous block. If it is free, merge the two. */ 753 if ((void *) head > (void *) AREA_FIRST_BLOCK (area)) {887 if ((void *) head > (void *) AREA_FIRST_BLOCK_HEAD(area)) { 754 888 heap_block_foot_t *prev_foot = 755 889 (heap_block_foot_t *) (((void *) head) - sizeof(heap_block_foot_t)); … … 765 899 } 766 900 767 heap_shrink( );901 heap_shrink(area); 768 902 769 903 futex_up(&malloc_futex); -
uspace/lib/c/include/adt/fifo.h
ra0bb65af r98e4507 51 51 typedef unsigned long fifo_index_t; 52 52 53 #define FIFO_CREATE_STATIC(name, t, itms) \54 struct { \55 t fifo[(itms)]; \56 fifo_count_t items; \57 fifo_index_t head; \58 fifo_index_t tail; \53 #define FIFO_CREATE_STATIC(name, t, itms) \ 54 struct { \ 55 t fifo[(itms)]; \ 56 fifo_count_t items; \ 57 fifo_index_t head; \ 58 fifo_index_t tail; \ 59 59 } name 60 60 -
uspace/lib/c/include/adt/list.h
ra0bb65af r98e4507 47 47 * 48 48 * @param name Name of the new statically allocated list. 49 */ 50 #define LIST_INITIALIZE(name) link_t name = { \ 51 .prev = &name, \ 52 .next = &name \ 53 } 49 * 50 */ 51 #define LIST_INITIALIZE(name) \ 52 link_t name = { \ 53 .prev = &name, \ 54 .next = &name \ 55 } 56 57 #define list_get_instance(link, type, member) \ 58 ((type *) (((void *)(link)) - ((void *) &(((type *) NULL)->member)))) 59 60 #define list_foreach(list, iterator) \ 61 for (link_t *iterator = (list).next; \ 62 iterator != &(list); iterator = iterator->next) 54 63 55 64 /** Initialize doubly-linked circular list link … … 58 67 * 59 68 * @param link Pointer to link_t structure to be initialized. 69 * 60 70 */ 61 71 static inline void link_initialize(link_t *link) … … 69 79 * Initialize doubly-linked circular list. 70 80 * 71 * @param head Pointer to link_t structure representing head of the list. 72 */ 73 static inline void list_initialize(link_t *head) 74 { 75 head->prev = head; 76 head->next = head; 81 * @param list Pointer to link_t structure representing the list. 82 * 83 */ 84 static inline void list_initialize(link_t *list) 85 { 86 list->prev = list; 87 list->next = list; 77 88 } 78 89 … … 82 93 * 83 94 * @param link Pointer to link_t structure to be added. 84 * @param head Pointer to link_t structure representing head of the list. 85 */ 86 static inline void list_prepend(link_t *link, link_t *head) 87 { 88 link->next = head->next; 89 link->prev = head; 90 head->next->prev = link; 91 head->next = link; 95 * @param list Pointer to link_t structure representing the list. 96 * 97 */ 98 static inline void list_prepend(link_t *link, link_t *list) 99 { 100 link->next = list->next; 101 link->prev = list; 102 list->next->prev = link; 103 list->next = link; 92 104 } 93 105 … … 97 109 * 98 110 * @param link Pointer to link_t structure to be added. 99 * @param head Pointer to link_t structure representing head of the list. 100 */ 101 static inline void list_append(link_t *link, link_t *head) 102 { 103 link->prev = head->prev; 104 link->next = head; 105 head->prev->next = link; 106 head->prev = link; 107 } 108 109 /** Insert item before another item in doubly-linked circular list. */ 110 static inline void list_insert_before(link_t *l, link_t *r) 111 { 112 list_append(l, r); 113 } 114 115 /** Insert item after another item in doubly-linked circular list. */ 116 static inline void list_insert_after(link_t *r, link_t *l) 117 { 118 list_prepend(l, r); 111 * @param list Pointer to link_t structure representing the list. 112 * 113 */ 114 static inline void list_append(link_t *link, link_t *list) 115 { 116 link->prev = list->prev; 117 link->next = list; 118 list->prev->next = link; 119 list->prev = link; 120 } 121 122 /** Insert item before another item in doubly-linked circular list. 123 * 124 */ 125 static inline void list_insert_before(link_t *link, link_t *list) 126 { 127 list_append(link, list); 128 } 129 130 /** Insert item after another item in doubly-linked circular list. 131 * 132 */ 133 static inline void list_insert_after(link_t *link, link_t *list) 134 { 135 list_prepend(list, link); 119 136 } 120 137 … … 123 140 * Remove item from doubly-linked circular list. 124 141 * 125 * @param link Pointer to link_t structure to be removed from the list it is contained in. 142 * @param link Pointer to link_t structure to be removed from the list 143 * it is contained in. 144 * 126 145 */ 127 146 static inline void list_remove(link_t *link) … … 136 155 * Query emptiness of doubly-linked circular list. 137 156 * 138 * @param head Pointer to link_t structure representing head of the list. 139 */ 140 static inline int list_empty(link_t *head) 141 { 142 return ((head->next == head) ? 1 : 0); 143 } 144 157 * @param list Pointer to link_t structure representing the list. 158 * 159 */ 160 static inline int list_empty(link_t *list) 161 { 162 return (list->next == list); 163 } 164 165 /** Get head item of a list. 166 * 167 * @param list Pointer to link_t structure representing the list. 168 * 169 * @return Head item of the list. 170 * @return NULL if the list is empty. 171 * 172 */ 173 static inline link_t *list_head(link_t *list) 174 { 175 return ((list->next == list) ? NULL : list->next); 176 } 145 177 146 178 /** Split or concatenate headless doubly-linked circular list … … 151 183 * concatenates splitted lists and splits concatenated lists. 152 184 * 153 * @param part1 Pointer to link_t structure leading the first (half of the headless) list. 154 * @param part2 Pointer to link_t structure leading the second (half of the headless) list. 185 * @param part1 Pointer to link_t structure leading the first 186 * (half of the headless) list. 187 * @param part2 Pointer to link_t structure leading the second 188 * (half of the headless) list. 189 * 155 190 */ 156 191 static inline void headless_list_split_or_concat(link_t *part1, link_t *part2) … … 165 200 } 166 201 167 168 202 /** Split headless doubly-linked circular list 169 203 * 170 204 * Split headless doubly-linked circular list. 171 205 * 172 * @param part1 Pointer to link_t structure leading the first half of the headless list. 173 * @param part2 Pointer to link_t structure leading the second half of the headless list. 206 * @param part1 Pointer to link_t structure leading 207 * the first half of the headless list. 208 * @param part2 Pointer to link_t structure leading 209 * the second half of the headless list. 210 * 174 211 */ 175 212 static inline void headless_list_split(link_t *part1, link_t *part2) … … 182 219 * Concatenate two headless doubly-linked circular lists. 183 220 * 184 * @param part1 Pointer to link_t structure leading the first headless list. 185 * @param part2 Pointer to link_t structure leading the second headless list. 221 * @param part1 Pointer to link_t structure leading 222 * the first headless list. 223 * @param part2 Pointer to link_t structure leading 224 * the second headless list. 225 * 186 226 */ 187 227 static inline void headless_list_concat(link_t *part1, link_t *part2) … … 190 230 } 191 231 192 #define list_get_instance(link, type, member) ((type *) (((void *)(link)) - ((void *) &(((type *) NULL)->member)))) 193 194 extern int list_member(const link_t *link, const link_t *head); 195 extern void list_concat(link_t *head1, link_t *head2); 196 extern unsigned int list_count(const link_t *link); 232 /** Get n-th item of a list. 233 * 234 * @param list Pointer to link_t structure representing the list. 235 * @param n Item number (indexed from zero). 236 * 237 * @return n-th item of the list. 238 * @return NULL if no n-th item found. 239 * 240 */ 241 static inline link_t *list_nth(link_t *list, unsigned int n) 242 { 243 unsigned int cnt = 0; 244 245 list_foreach(*list, link) { 246 if (cnt == n) 247 return link; 248 249 cnt++; 250 } 251 252 return NULL; 253 } 254 255 extern int list_member(const link_t *, const link_t *); 256 extern void list_concat(link_t *, link_t *); 257 extern unsigned int list_count(const link_t *); 197 258 198 259 #endif -
uspace/lib/c/include/adt/measured_strings.h
ra0bb65af r98e4507 61 61 extern measured_string_t *measured_string_create_bulk(const uint8_t *, size_t); 62 62 extern measured_string_t *measured_string_copy(measured_string_t *); 63 63 64 extern int measured_strings_receive(measured_string_t **, uint8_t **, size_t); 64 65 extern int measured_strings_reply(const measured_string_t *, size_t); -
uspace/lib/c/include/as.h
ra0bb65af r98e4507 54 54 } 55 55 56 extern void *as_area_create(void * address, size_t size, int flags);57 extern int as_area_resize(void * address, size_t size, int flags);58 extern int as_area_change_flags(void * address, int flags);59 extern int as_area_destroy(void * address);60 extern void *set_maxheapsize(size_t mhs);61 extern void * as_get_mappable_page(size_t sz);56 extern void *as_area_create(void *, size_t, unsigned int); 57 extern int as_area_resize(void *, size_t, unsigned int); 58 extern int as_area_change_flags(void *, unsigned int); 59 extern int as_area_destroy(void *); 60 extern void *set_maxheapsize(size_t); 61 extern void *as_get_mappable_page(size_t); 62 62 63 63 #endif -
uspace/lib/c/include/event.h
ra0bb65af r98e4507 39 39 40 40 extern int event_subscribe(event_type_t, sysarg_t); 41 extern int event_unmask(event_type_t); 41 42 42 43 #endif -
uspace/lib/c/include/fibril.h
ra0bb65af r98e4507 70 70 int (*func)(void *); 71 71 tcb_t *tcb; 72 72 73 73 struct fibril *clean_after_me; 74 74 int retval; 75 75 int flags; 76 76 77 77 fibril_owner_info_t *waits_for; 78 78 } fibril_t; -
uspace/lib/softfloat/generic/add.c
ra0bb65af r98e4507 27 27 */ 28 28 29 /** @addtogroup softfloat 29 /** @addtogroup softfloat 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #include <sftypes.h>36 #include <add.h>37 #include <comparison.h>35 #include <sftypes.h> 36 #include <add.h> 37 #include <comparison.h> 38 38 39 39 /** Add two Float32 numbers with same signs … … 139 139 a.parts.exp = exp1; 140 140 141 /* Clear hidden bit and shift */141 /* Clear hidden bit and shift */ 142 142 a.parts.fraction = ((frac1 >> 6) & (~FLOAT32_HIDDEN_BIT_MASK)) ; 143 143 return a; 144 144 } 145 146 145 147 146 /** Add two Float64 numbers with same signs … … 250 249 251 250 a.parts.exp = exp1; 252 /* Clear hidden bit and shift */251 /* Clear hidden bit and shift */ 253 252 a.parts.fraction = ( (frac1 >> 6 ) & (~FLOAT64_HIDDEN_BIT_MASK)); 254 253 -
uspace/lib/softfloat/generic/common.c
ra0bb65af r98e4507 27 27 */ 28 28 29 /** @addtogroup softfloat 29 /** @addtogroup softfloat 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #include <sftypes.h>36 #include <common.h>35 #include <sftypes.h> 36 #include <common.h> 37 37 38 38 /* Table for fast leading zeroes counting */ … … 213 213 /** @} 214 214 */ 215 -
uspace/lib/softfloat/generic/comparison.c
ra0bb65af r98e4507 27 27 */ 28 28 29 /** @addtogroup softfloat 29 /** @addtogroup softfloat 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #include <sftypes.h>36 #include <comparison.h>35 #include <sftypes.h> 36 #include <comparison.h> 37 37 38 inline int isFloat32NaN(float32 f) 39 { /* NaN : exp = 0xff and nonzero fraction */ 40 return ((f.parts.exp==0xFF)&&(f.parts.fraction)); 38 /* NaN : exp = 0xff and nonzero fraction */ 39 int isFloat32NaN(float32 f) 40 { 41 return ((f.parts.exp == 0xFF) && (f.parts.fraction)); 41 42 } 42 43 43 inline int isFloat64NaN(float64 d) 44 { /* NaN : exp = 0x7ff and nonzero fraction */ 45 return ((d.parts.exp==0x7FF)&&(d.parts.fraction)); 44 /* NaN : exp = 0x7ff and nonzero fraction */ 45 int isFloat64NaN(float64 d) 46 { 47 return ((d.parts.exp == 0x7FF) && (d.parts.fraction)); 46 48 } 47 49 48 inline int isFloat32SigNaN(float32 f) 49 { /* SigNaN : exp = 0xff fraction = 0xxxxx..x (binary), where at least one x is nonzero */ 50 return ((f.parts.exp==0xFF)&&(f.parts.fraction<0x400000)&&(f.parts.fraction)); 50 /* SigNaN : exp = 0xff fraction = 0xxxxx..x (binary), where at least one x is nonzero */ 51 int isFloat32SigNaN(float32 f) 52 { 53 return ((f.parts.exp == 0xFF) && (f.parts.fraction < 0x400000) && (f.parts.fraction)); 51 54 } 52 55 53 inline int isFloat64SigNaN(float64 d) 54 { /* SigNaN : exp = 0x7ff fraction = 0xxxxx..x (binary), where at least one x is nonzero */ 55 return ((d.parts.exp==0x7FF)&&(d.parts.fraction)&&(d.parts.fraction<0x8000000000000ll)); 56 /* SigNaN : exp = 0x7ff fraction = 0xxxxx..x (binary), where at least one x is nonzero */ 57 int isFloat64SigNaN(float64 d) 58 { 59 return ((d.parts.exp == 0x7FF) && (d.parts.fraction) && (d.parts.fraction < 0x8000000000000ll)); 56 60 } 57 61 58 in line int isFloat32Infinity(float32 f)62 int isFloat32Infinity(float32 f) 59 63 { 60 return ((f.parts.exp ==0xFF)&&(f.parts.fraction==0x0));64 return ((f.parts.exp == 0xFF) && (f.parts.fraction == 0x0)); 61 65 } 62 66 63 in line int isFloat64Infinity(float64 d)67 int isFloat64Infinity(float64 d) 64 68 { 65 return ((d.parts.exp ==0x7FF)&&(d.parts.fraction==0x0));69 return ((d.parts.exp == 0x7FF) && (d.parts.fraction == 0x0)); 66 70 } 67 71 68 in line int isFloat32Zero(float32 f)72 int isFloat32Zero(float32 f) 69 73 { 70 74 return (((f.binary) & 0x7FFFFFFF) == 0); 71 75 } 72 76 73 in line int isFloat64Zero(float64 d)77 int isFloat64Zero(float64 d) 74 78 { 75 79 return (((d.binary) & 0x7FFFFFFFFFFFFFFFll) == 0); … … 77 81 78 82 /** 79 * @return 1 , if both floats are equal - but NaNs are not recognized83 * @return 1 if both floats are equal - but NaNs are not recognized 80 84 */ 81 in line int isFloat32eq(float32 a, float32 b)85 int isFloat32eq(float32 a, float32 b) 82 86 { 83 return ((a.binary==b.binary)||(((a.binary| b.binary)&0x7FFFFFFF)==0)); /* a equals to b or both are zeros (with any sign) */ 87 /* a equals to b or both are zeros (with any sign) */ 88 return ((a.binary==b.binary) || (((a.binary | b.binary) & 0x7FFFFFFF) == 0)); 84 89 } 85 90 86 91 /** 87 * @return 1 , if a<b - but NaNs are not recognized92 * @return 1 if a < b - but NaNs are not recognized 88 93 */ 89 in line int isFloat32lt(float32 a, float32 b)94 int isFloat32lt(float32 a, float32 b) 90 95 { 91 if (((a.binary | b.binary)&0x7FFFFFFF)==0) {96 if (((a.binary | b.binary) & 0x7FFFFFFF) == 0) 92 97 return 0; /* +- zeroes */ 93 };94 98 95 if ((a.parts.sign)&&(b.parts.sign)) { 96 /*if both are negative, smaller is that with greater binary value*/ 97 return (a.binary>b.binary); 98 }; 99 if ((a.parts.sign) && (b.parts.sign)) 100 /* if both are negative, smaller is that with greater binary value */ 101 return (a.binary > b.binary); 99 102 100 /* lets negate signs - now will be positive numbers allways bigger than negative (first bit will be set for unsigned integer comparison)*/ 101 a.parts.sign=!a.parts.sign; 102 b.parts.sign=!b.parts.sign; 103 return (a.binary<b.binary); 104 103 /* lets negate signs - now will be positive numbers allways bigger than negative (first bit will be set for unsigned integer comparison) */ 104 a.parts.sign = !a.parts.sign; 105 b.parts.sign = !b.parts.sign; 106 return (a.binary < b.binary); 105 107 } 106 108 107 109 /** 108 * @return 1 , if a>b - but NaNs are not recognized110 * @return 1 if a > b - but NaNs are not recognized 109 111 */ 110 in line int isFloat32gt(float32 a, float32 b)112 int isFloat32gt(float32 a, float32 b) 111 113 { 112 if (((a.binary | b.binary)&0x7FFFFFFF)==0) {114 if (((a.binary | b.binary) & 0x7FFFFFFF) == 0) 113 115 return 0; /* zeroes are equal with any sign */ 114 };115 116 116 if ((a.parts.sign)&&(b.parts.sign)) { 117 /*if both are negative, greater is that with smaller binary value*/ 118 return (a.binary<b.binary); 119 }; 117 if ((a.parts.sign) && (b.parts.sign)) 118 /* if both are negative, greater is that with smaller binary value */ 119 return (a.binary < b.binary); 120 120 121 /* lets negate signs - now will be positive numbers allways bigger than negative (first bit will be set for unsigned integer comparison)*/ 122 a.parts.sign=!a.parts.sign; 123 b.parts.sign=!b.parts.sign; 124 return (a.binary>b.binary); 125 121 /* lets negate signs - now will be positive numbers allways bigger than negative (first bit will be set for unsigned integer comparison) */ 122 a.parts.sign = !a.parts.sign; 123 b.parts.sign = !b.parts.sign; 124 return (a.binary > b.binary); 126 125 } 127 126 -
uspace/lib/softfloat/generic/div.c
ra0bb65af r98e4507 27 27 */ 28 28 29 /** @addtogroup softfloat 29 /** @addtogroup softfloat 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #include<sftypes.h> 36 #include<add.h> 37 #include<div.h> 38 #include<comparison.h> 39 #include<mul.h> 40 #include<common.h> 41 35 #include <sftypes.h> 36 #include <add.h> 37 #include <div.h> 38 #include <comparison.h> 39 #include <mul.h> 40 #include <common.h> 42 41 43 42 float32 divFloat32(float32 a, float32 b) -
uspace/lib/softfloat/generic/mul.c
ra0bb65af r98e4507 27 27 */ 28 28 29 /** @addtogroup softfloat 29 /** @addtogroup softfloat 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #include <sftypes.h>36 #include <mul.h>37 #include <comparison.h>38 #include <common.h>35 #include <sftypes.h> 36 #include <mul.h> 37 #include <comparison.h> 38 #include <common.h> 39 39 40 40 /** Multiply two 32 bit float numbers -
uspace/lib/softfloat/generic/other.c
ra0bb65af r98e4507 27 27 */ 28 28 29 /** @addtogroup softfloat 29 /** @addtogroup softfloat 30 30 * @{ 31 31 */ -
uspace/lib/softfloat/generic/softfloat.c
ra0bb65af r98e4507 35 35 */ 36 36 37 #include <softfloat.h>38 #include <sftypes.h>39 40 #include <add.h>41 #include <sub.h>42 #include <mul.h>43 #include <div.h>44 45 #include <conversion.h>46 #include <comparison.h>47 #include <other.h>48 49 #include <functions.h>37 #include <softfloat.h> 38 #include <sftypes.h> 39 40 #include <add.h> 41 #include <sub.h> 42 #include <mul.h> 43 #include <div.h> 44 45 #include <conversion.h> 46 #include <comparison.h> 47 #include <other.h> 48 49 #include <functions.h> 50 50 51 51 /* Arithmetic functions */ … … 494 494 } 495 495 496 497 496 /** @} 498 497 */ 499 -
uspace/lib/softfloat/generic/sub.c
ra0bb65af r98e4507 27 27 */ 28 28 29 /** @addtogroup softfloat 29 /** @addtogroup softfloat 30 30 * @{ 31 31 */ … … 33 33 */ 34 34 35 #include <sftypes.h>36 #include <sub.h>37 #include <comparison.h>35 #include <sftypes.h> 36 #include <sub.h> 37 #include <comparison.h> 38 38 39 39 /** Subtract two float32 numbers with same signs … … 260 260 } 261 261 262 263 /** @} 264 */ 265 262 /** @} 263 */ -
uspace/lib/softfloat/include/add.h
ra0bb65af r98e4507 27 27 */ 28 28 29 /** @addtogroup softfloat 29 /** @addtogroup softfloat 30 30 * @{ 31 31 */ … … 36 36 #define __ADD_H__ 37 37 38 float32 addFloat32(float32 a, float32 b); 39 40 float64 addFloat64(float64 a, float64 b); 38 extern float32 addFloat32(float32, float32); 39 extern float64 addFloat64(float64, float64); 41 40 42 41 #endif 43 42 44 45 /** @} 43 /** @} 46 44 */ 47 -
uspace/lib/softfloat/include/common.h
ra0bb65af r98e4507 27 27 */ 28 28 29 /** @addtogroup softfloat 29 /** @addtogroup softfloat 30 30 * @{ 31 31 */ … … 36 36 #define __COMMON_H__ 37 37 38 #include <sftypes.h>38 #include <sftypes.h> 39 39 40 float64 finishFloat64(int32_t cexp, uint64_t cfrac, char sign);40 extern float64 finishFloat64(int32_t, uint64_t, char); 41 41 42 int countZeroes64(uint64_t i);43 int countZeroes32(uint32_t i);44 int countZeroes8(uint8_t i);42 extern int countZeroes64(uint64_t); 43 extern int countZeroes32(uint32_t); 44 extern int countZeroes8(uint8_t); 45 45 46 void roundFloat32(int32_t *exp, uint32_t *fraction);47 void roundFloat64(int32_t *exp, uint64_t *fraction);46 extern void roundFloat32(int32_t *, uint32_t *); 47 extern void roundFloat64(int32_t *, uint64_t *); 48 48 49 49 #endif 50 50 51 /** @}51 /** @} 52 52 */ 53 -
uspace/lib/softfloat/include/comparison.h
ra0bb65af r98e4507 27 27 */ 28 28 29 /** @addtogroup softfloat 29 /** @addtogroup softfloat 30 30 * @{ 31 31 */ … … 36 36 #define __COMPARISON_H__ 37 37 38 inline int isFloat32NaN(float32 f);39 inline int isFloat32SigNaN(float32 f);38 extern int isFloat32NaN(float32); 39 extern int isFloat32SigNaN(float32); 40 40 41 inline int isFloat32Infinity(float32 f);42 inline int isFloat32Zero(float32 f);41 extern int isFloat32Infinity(float32); 42 extern int isFloat32Zero(float32); 43 43 44 inline int isFloat64NaN(float64 d);45 inline int isFloat64SigNaN(float64 d);44 extern int isFloat64NaN(float64); 45 extern int isFloat64SigNaN(float64); 46 46 47 inline int isFloat64Infinity(float64 d);48 inline int isFloat64Zero(float64 d);47 extern int isFloat64Infinity(float64); 48 extern int isFloat64Zero(float64); 49 49 50 inline int isFloat32eq(float32 a, float32 b);51 inline int isFloat32lt(float32 a, float32 b);52 inline int isFloat32gt(float32 a, float32 b);50 extern int isFloat32eq(float32, float32); 51 extern int isFloat32lt(float32, float32); 52 extern int isFloat32gt(float32, float32); 53 53 54 54 #endif 55 55 56 57 /** @} 56 /** @} 58 57 */ 59 -
uspace/lib/softfloat/include/conversion.h
ra0bb65af r98e4507 27 27 */ 28 28 29 /** @addtogroup softfloat 29 /** @addtogroup softfloat 30 30 * @{ 31 31 */ … … 36 36 #define __CONVERSION_H__ 37 37 38 float64 convertFloat32ToFloat64(float32 a); 38 extern float64 convertFloat32ToFloat64(float32); 39 extern float32 convertFloat64ToFloat32(float64); 39 40 40 float32 convertFloat64ToFloat32(float64 a); 41 extern uint32_t float32_to_uint32(float32); 42 extern int32_t float32_to_int32(float32); 41 43 42 uint32_t float32_to_uint32(float32 a);43 int32_t float32_to_int32(float32 a);44 extern uint64_t float32_to_uint64(float32); 45 extern int64_t float32_to_int64(float32); 44 46 45 uint64_t float32_to_uint64(float32 a);46 int64_t float32_to_int64(float32 a);47 extern uint64_t float64_to_uint64(float64); 48 extern int64_t float64_to_int64(float64); 47 49 48 uint64_t float64_to_uint64(float64 a);49 int64_t float64_to_int64(float64 a);50 extern uint32_t float64_to_uint32(float64); 51 extern int32_t float64_to_int32(float64); 50 52 51 uint32_t float64_to_uint32(float64 a);52 int32_t float64_to_int32(float64 a);53 extern float32 uint32_to_float32(uint32_t); 54 extern float32 int32_to_float32(int32_t); 53 55 54 float32 uint32_to_float32(uint32_t i);55 float32 int32_to_float32(int32_t i);56 extern float32 uint64_to_float32(uint64_t); 57 extern float32 int64_to_float32(int64_t); 56 58 57 float32 uint64_to_float32(uint64_t i);58 float32 int64_to_float32(int64_t i);59 extern float64 uint32_to_float64(uint32_t); 60 extern float64 int32_to_float64(int32_t); 59 61 60 float64 uint32_to_float64(uint32_t i); 61 float64 int32_to_float64(int32_t i); 62 63 float64 uint64_to_float64(uint64_t i); 64 float64 int64_to_float64(int64_t i); 62 extern float64 uint64_to_float64(uint64_t); 63 extern float64 int64_to_float64(int64_t); 65 64 66 65 #endif 67 66 68 69 /** @} 67 /** @} 70 68 */ 71 -
uspace/lib/softfloat/include/div.h
ra0bb65af r98e4507 27 27 */ 28 28 29 /** @addtogroup softfloat 29 /** @addtogroup softfloat 30 30 * @{ 31 31 */ … … 36 36 #define __DIV_H__ 37 37 38 float32 divFloat32(float32 a, float32 b);39 float64 divFloat64(float64 a, float64 b);38 extern float32 divFloat32(float32, float32); 39 extern float64 divFloat64(float64, float64); 40 40 41 uint64_t divFloat64estim(uint64_t a, uint64_t b);41 extern uint64_t divFloat64estim(uint64_t, uint64_t); 42 42 43 43 #endif 44 44 45 46 /** @} 45 /** @} 47 46 */ 48 -
uspace/lib/softfloat/include/mul.h
ra0bb65af r98e4507 27 27 */ 28 28 29 /** @addtogroup softfloat 29 /** @addtogroup softfloat 30 30 * @{ 31 31 */ … … 36 36 #define __MUL_H__ 37 37 38 float32 mulFloat32(float32 a, float32 b); 38 extern float32 mulFloat32(float32, float32); 39 extern float64 mulFloat64(float64, float64); 39 40 40 float64 mulFloat64(float64 a, float64 b); 41 42 void mul64integers(uint64_t a,uint64_t b, uint64_t *lo, uint64_t *hi); 41 extern void mul64integers(uint64_t, uint64_t, uint64_t *, uint64_t *); 43 42 44 43 #endif 45 44 46 47 /** @} 45 /** @} 48 46 */ 49 -
uspace/lib/softfloat/include/other.h
ra0bb65af r98e4507 27 27 */ 28 28 29 /** @addtogroup softfloat 29 /** @addtogroup softfloat 30 30 * @{ 31 31 */ … … 38 38 #endif 39 39 40 41 /** @} 40 /** @} 42 41 */ 43 -
uspace/lib/softfloat/include/sftypes.h
ra0bb65af r98e4507 55 55 #error Unknown endianess 56 56 #endif 57 } parts __attribute__ ((packed));57 } parts __attribute__ ((packed)); 58 58 } float32; 59 59 … … 77 77 } float64; 78 78 79 #define FLOAT32_MAX 0x7f80000080 #define FLOAT32_MIN 0xff80000079 #define FLOAT32_MAX 0x7f800000 80 #define FLOAT32_MIN 0xff800000 81 81 #define FLOAT64_MAX 82 82 #define FLOAT64_MIN … … 86 86 * comparing with these constants is not sufficient. 87 87 */ 88 #define FLOAT32_NAN 0x7FC0000189 #define FLOAT32_SIGNAN 0x7F80000190 #define FLOAT32_INF 0x7F80000091 88 92 #define FLOAT 64_NAN 0x7FF8000000000001ll93 #define FLOAT 64_SIGNAN 0x7FF0000000000001ll94 #define FLOAT 64_INF 0x7FF0000000000000ll89 #define FLOAT32_NAN 0x7FC00001 90 #define FLOAT32_SIGNAN 0x7F800001 91 #define FLOAT32_INF 0x7F800000 95 92 96 #define FLOAT32_FRACTION_SIZE 23 97 #define FLOAT64_FRACTION_SIZE 52 93 #define FLOAT64_NAN 0x7FF8000000000001ll 94 #define FLOAT64_SIGNAN 0x7FF0000000000001ll 95 #define FLOAT64_INF 0x7FF0000000000000ll 98 96 99 #define FLOAT32_ HIDDEN_BIT_MASK 0x800000100 #define FLOAT64_ HIDDEN_BIT_MASK 0x10000000000000ll97 #define FLOAT32_FRACTION_SIZE 23 98 #define FLOAT64_FRACTION_SIZE 52 101 99 102 #define FLOAT32_ MAX_EXPONENT 0xFF103 #define FLOAT64_ MAX_EXPONENT 0x7FF100 #define FLOAT32_HIDDEN_BIT_MASK 0x800000 101 #define FLOAT64_HIDDEN_BIT_MASK 0x10000000000000ll 104 102 105 #define FLOAT32_BIAS 0x7F 106 #define FLOAT64_BIAS 0x3FF 107 #define FLOAT80_BIAS 0x3FFF 103 #define FLOAT32_MAX_EXPONENT 0xFF 104 #define FLOAT64_MAX_EXPONENT 0x7FF 108 105 106 #define FLOAT32_BIAS 0x7F 107 #define FLOAT64_BIAS 0x3FF 108 #define FLOAT80_BIAS 0x3FFF 109 109 110 110 #endif -
uspace/lib/softfloat/include/softfloat.h
ra0bb65af r98e4507 27 27 */ 28 28 29 /** @addtogroup softfloat 29 /** @addtogroup softfloat 30 30 * @{ 31 31 */ … … 36 36 #define __SOFTFLOAT_H__ 37 37 38 float __addsf3(float a, float b);39 double __adddf3(double a, double b);40 long double __addtf3(long double a, long double b);41 long double __addxf3(long double a, long double b);42 43 float __subsf3(float a, float b);44 double __subdf3(double a, double b);45 long double __subtf3(long double a, long double b);46 long double __subxf3(long double a, long double b);47 48 float __mulsf3(float a, float b);49 double __muldf3(double a, double b);50 long double __multf3(long double a, long double b);51 long double __mulxf3(long double a, long double b);52 53 float __divsf3(float a, float b);54 double __divdf3(double a, double b);55 long double __divtf3(long double a, long double b);56 long double __divxf3(long double a, long double b);57 58 float __negsf2(float a);59 double __negdf2(double a);60 long double __negtf2(long double a);61 long double __negxf2(long double a);62 63 double __extendsfdf2(float a);64 long double __extendsftf2(float a);65 long double __extendsfxf2(float a);66 long double __extenddftf2(double a);67 long double __extenddfxf2(double a);68 69 double __truncxfdf2(long double a);70 double __trunctfdf2(long double a);71 float __truncxfsf2(long double a);72 float __trunctfsf2(long double a);73 float __truncdfsf2(double a);74 75 int __fixsfsi(float a);76 int __fixdfsi(double a);77 int __fixtfsi(long double a);78 int __fixxfsi(long double a);79 80 long __fixsfdi(float a);81 long __fixdfdi(double a);82 long __fixtfdi(long double a);83 long __fixxfdi(long double a);84 85 long long __fixsfti(float a);86 long long __fixdfti(double a);87 long long __fixtfti(long double a);88 long long __fixxfti(long double a);89 90 unsigned int __fixunssfsi(float a);91 unsigned int __fixunsdfsi(double a);92 unsigned int __fixunstfsi(long double a);93 unsigned int __fixunsxfsi(long double a);94 95 unsigned long __fixunssfdi(float a);96 unsigned long __fixunsdfdi(double a);97 unsigned long __fixunstfdi(long double a);98 unsigned long __fixunsxfdi(long double a);99 100 unsigned long long __fixunssfti(float a);101 unsigned long long __fixunsdfti(double a);102 unsigned long long __fixunstfti(long double a);103 unsigned long long __fixunsxfti(long double a);104 105 float __floatsisf(int i);106 double __floatsidf(int i);107 long double __floatsitf(int i);108 long double __floatsixf(int i);109 110 float __floatdisf(long i);111 double __floatdidf(long i);112 long double __floatditf(long i);113 long double __floatdixf(long i);114 115 float __floattisf(long long i);116 double __floattidf(long long i);117 long double __floattitf(long long i);118 long double __floattixf(long long i);119 120 float __floatunsisf(unsigned int i);121 double __floatunsidf(unsigned int i);122 long double __floatunsitf(unsigned int i);123 long double __floatunsixf(unsigned int i);124 125 float __floatundisf(unsigned long i);126 double __floatundidf(unsigned long i);127 long double __floatunditf(unsigned long i);128 long double __floatundixf(unsigned long i);129 130 float __floatuntisf(unsigned long long i);131 double __floatuntidf(unsigned long long i);132 long double __floatuntitf(unsigned long long i);133 long double __floatuntixf(unsigned long long i);134 135 int __cmpsf2(float a, float b);136 int __cmpdf2(double a, double b);137 int __cmptf2(long double a, long double b);138 139 int __unordsf2(float a, float b);140 int __unorddf2(double a, double b);141 int __unordtf2(long double a, long double b);142 143 int __eqsf2(float a, float b);144 int __eqdf2(double a, double b);145 int __eqtf2(long double a, long double b);146 147 int __nesf2(float a, float b);148 int __nedf2(double a, double b);149 int __netf2(long double a, long double b);150 151 int __gesf2(float a, float b);152 int __gedf2(double a, double b);153 int __getf2(long double a, long double b);154 155 int __ltsf2(float a, float b);156 int __ltdf2(double a, double b);157 int __lttf2(long double a, long double b);158 int __lesf2(float a, float b);159 int __ledf2(double a, double b);160 int __letf2(long double a, long double b);161 162 int __gtsf2(float a, float b);163 int __gtdf2(double a, double b);164 int __gttf2(long double a, long double b);165 166 /* Not implemented yet */167 float __powisf2(float a, int b);38 extern float __addsf3(float, float); 39 extern double __adddf3(double, double); 40 extern long double __addtf3(long double, long double); 41 extern long double __addxf3(long double, long double); 42 43 extern float __subsf3(float, float); 44 extern double __subdf3(double, double); 45 extern long double __subtf3(long double, long double); 46 extern long double __subxf3(long double, long double); 47 48 extern float __mulsf3(float, float); 49 extern double __muldf3(double, double); 50 extern long double __multf3(long double, long double); 51 extern long double __mulxf3(long double, long double); 52 53 extern float __divsf3(float, float); 54 extern double __divdf3(double, double); 55 extern long double __divtf3(long double, long double); 56 extern long double __divxf3(long double, long double); 57 58 extern float __negsf2(float); 59 extern double __negdf2(double); 60 extern long double __negtf2(long double); 61 extern long double __negxf2(long double); 62 63 extern double __extendsfdf2(float); 64 extern long double __extendsftf2(float); 65 extern long double __extendsfxf2(float); 66 extern long double __extenddftf2(double); 67 extern long double __extenddfxf2(double); 68 69 extern double __truncxfdf2(long double); 70 extern double __trunctfdf2(long double); 71 extern float __truncxfsf2(long double); 72 extern float __trunctfsf2(long double); 73 extern float __truncdfsf2(double); 74 75 extern int __fixsfsi(float); 76 extern int __fixdfsi(double); 77 extern int __fixtfsi(long double); 78 extern int __fixxfsi(long double); 79 80 extern long __fixsfdi(float); 81 extern long __fixdfdi(double); 82 extern long __fixtfdi(long double); 83 extern long __fixxfdi(long double); 84 85 extern long long __fixsfti(float); 86 extern long long __fixdfti(double); 87 extern long long __fixtfti(long double); 88 extern long long __fixxfti(long double); 89 90 extern unsigned int __fixunssfsi(float); 91 extern unsigned int __fixunsdfsi(double); 92 extern unsigned int __fixunstfsi(long double); 93 extern unsigned int __fixunsxfsi(long double); 94 95 extern unsigned long __fixunssfdi(float); 96 extern unsigned long __fixunsdfdi(double); 97 extern unsigned long __fixunstfdi(long double); 98 extern unsigned long __fixunsxfdi(long double); 99 100 extern unsigned long long __fixunssfti(float); 101 extern unsigned long long __fixunsdfti(double); 102 extern unsigned long long __fixunstfti(long double); 103 extern unsigned long long __fixunsxfti(long double); 104 105 extern float __floatsisf(int); 106 extern double __floatsidf(int); 107 extern long double __floatsitf(int); 108 extern long double __floatsixf(int); 109 110 extern float __floatdisf(long); 111 extern double __floatdidf(long); 112 extern long double __floatditf(long); 113 extern long double __floatdixf(long); 114 115 extern float __floattisf(long long); 116 extern double __floattidf(long long); 117 extern long double __floattitf(long long); 118 extern long double __floattixf(long long); 119 120 extern float __floatunsisf(unsigned int); 121 extern double __floatunsidf(unsigned int); 122 extern long double __floatunsitf(unsigned int); 123 extern long double __floatunsixf(unsigned int); 124 125 extern float __floatundisf(unsigned long); 126 extern double __floatundidf(unsigned long); 127 extern long double __floatunditf(unsigned long); 128 extern long double __floatundixf(unsigned long); 129 130 extern float __floatuntisf(unsigned long long); 131 extern double __floatuntidf(unsigned long long); 132 extern long double __floatuntitf(unsigned long long); 133 extern long double __floatuntixf(unsigned long long); 134 135 extern int __cmpsf2(float, float); 136 extern int __cmpdf2(double, double); 137 extern int __cmptf2(long double, long double); 138 139 extern int __unordsf2(float, float); 140 extern int __unorddf2(double, double); 141 extern int __unordtf2(long double, long double); 142 143 extern int __eqsf2(float, float); 144 extern int __eqdf2(double, double); 145 extern int __eqtf2(long double, long double); 146 147 extern int __nesf2(float, float); 148 extern int __nedf2(double, double); 149 extern int __netf2(long double, long double); 150 151 extern int __gesf2(float, float); 152 extern int __gedf2(double, double); 153 extern int __getf2(long double, long double); 154 155 extern int __ltsf2(float, float); 156 extern int __ltdf2(double, double); 157 extern int __lttf2(long double, long double); 158 extern int __lesf2(float, float); 159 extern int __ledf2(double, double); 160 extern int __letf2(long double, long double); 161 162 extern int __gtsf2(float, float); 163 extern int __gtdf2(double, double); 164 extern int __gttf2(long double, long double); 165 166 /* Not implemented yet */ 167 extern float __powisf2(float, int); 168 168 169 169 #endif 170 170 171 172 /** @} 171 /** @} 173 172 */ 174 -
uspace/lib/softfloat/include/sub.h
ra0bb65af r98e4507 27 27 */ 28 28 29 /** @addtogroup softfloat 29 /** @addtogroup softfloat 30 30 * @{ 31 31 */ … … 36 36 #define __SUB_H__ 37 37 38 float32 subFloat32(float32 a, float32 b); 39 40 float64 subFloat64(float64 a, float64 b); 38 extern float32 subFloat32(float32, float32); 39 extern float64 subFloat64(float64, float64); 41 40 42 41 #endif 43 42 44 45 /** @} 43 /** @} 46 44 */ 47
Note:
See TracChangeset
for help on using the changeset viewer.
