Overview
Comment: | Make 16 bit selector UIDs the default. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
511a372fb8d2fdb3ba812c6bbc1b7c74 |
User & Date: | js on 2012-12-28 02:46:57 |
Other Links: | manifest | tags |
Context
2012-12-29
| ||
14:29 | OFXMLParser: OFMutableString -> OFString. check-in: 036c487137 user: js tags: trunk | |
2012-12-28
| ||
02:46 | Make 16 bit selector UIDs the default. check-in: 511a372fb8 user: js tags: trunk | |
2012-12-27
| ||
11:21 | OFHTTPServer: Pass errors from listening socket. check-in: df7b88405a user: js tags: trunk | |
Changes
Modified configure.ac from [96cf137383] to [8917dc30b2].
︙ | ︙ | |||
112 113 114 115 116 117 118 | ]) objc_runtime="ObjFW runtime" AC_CHECK_HEADER(objc/objc.h) AC_MSG_CHECKING(which Objective C runtime to use) AC_ARG_ENABLE(runtime, AS_HELP_STRING([--enable-runtime], [use the included runtime])) | | | | | 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | ]) objc_runtime="ObjFW runtime" AC_CHECK_HEADER(objc/objc.h) AC_MSG_CHECKING(which Objective C runtime to use) AC_ARG_ENABLE(runtime, AS_HELP_STRING([--enable-runtime], [use the included runtime])) AC_ARG_ENABLE(seluid24, AS_HELP_STRING([--enable-seluid24], [use 24 bit for selectors UIDs])) AS_IF([test x"$enable_runtime" != x"yes"], [ AS_IF([test x"$ac_cv_header_objc_objc_h" = x"yes"], [ dnl TODO: This is ugly. Let's think of a better check. AC_EGREP_CPP(yes, [ #import <objc/objc.h> #ifdef __objc_INCLUDE_GNU yes |
︙ | ︙ | |||
252 253 254 255 256 257 258 | #endif ], [ AC_SUBST(LOOKUP_S, lookup-arm-elf.S) AC_DEFINE(OF_ASM_LOOKUP, 1, [Whether to use assembly for lookup]) ]) | | | | | 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 | #endif ], [ AC_SUBST(LOOKUP_S, lookup-arm-elf.S) AC_DEFINE(OF_ASM_LOOKUP, 1, [Whether to use assembly for lookup]) ]) AS_IF([test x"$enable_seluid24" = x"yes"], [ AC_DEFINE(OF_SELUID24, 1, [Whether to use 24 bit selector UIDs]) ]) AX_CHECK_COMPILER_FLAGS(-Wno-deprecated-objc-isa-usage, [OBJCFLAGS="$OBJCFLAGS -Wno-deprecated-objc-isa-usage"]) ;; "Apple runtime") AC_DEFINE(OF_APPLE_RUNTIME, 1, |
︙ | ︙ |
Modified src/runtime/lookup-amd64-elf.S from [4f4b98be14] to [3207591b6d].
︙ | ︙ | |||
27 28 29 30 31 32 33 | movq (%rdi), %r8 movq 64(%r8), %r8 lookup: movq (%rsi), %rax movzbl %ah, %ecx movzbl %al, %edx | | | 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | movq (%rdi), %r8 movq 64(%r8), %r8 lookup: movq (%rsi), %rax movzbl %ah, %ecx movzbl %al, %edx #ifdef OF_SELUID24 shrl $16, %eax movq (%r8,%rax,8), %r8 #endif movq (%r8,%rcx,8), %r8 movq (%r8,%rdx,8), %rax |
︙ | ︙ |
Modified src/runtime/lookup-amd64-macho.S from [09cb0dc88d] to [5865aebdca].
︙ | ︙ | |||
27 28 29 30 31 32 33 | movq (%rdi), %r8 movq 64(%r8), %r8 lookup: movq (%rsi), %rax movzbl %ah, %ecx movzbl %al, %edx | | | 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | movq (%rdi), %r8 movq 64(%r8), %r8 lookup: movq (%rsi), %rax movzbl %ah, %ecx movzbl %al, %edx #ifdef OF_SELUID24 shrl $16, %eax movq (%r8,%rax,8), %r8 #endif movq (%r8,%rcx,8), %r8 movq (%r8,%rdx,8), %rax |
︙ | ︙ |
Modified src/runtime/lookup-arm-elf.S from [9640c55b02] to [ed5e108713].
︙ | ︙ | |||
24 25 26 27 28 29 30 | cmp r0, #0 beq ret_nil ldr r2, [r0, #0] ldr r2, [r2, #32] lookup: | | | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | cmp r0, #0 beq ret_nil ldr r2, [r0, #0] ldr r2, [r2, #32] lookup: #ifdef OF_SELUID24 ldrb r3, [r1, #2] ldr r2, [r2, r3, lsl #2] #endif ldrb r3, [r1, #1] ldr r2, [r2, r3, lsl #2] ldrb r3, [r1, #0] ldr r2, [r2, r3, lsl #2] |
︙ | ︙ |
Modified src/runtime/lookup-ppc-elf.S from [c03cad3b43] to [50cd1a1f6d].
︙ | ︙ | |||
24 25 26 27 28 29 30 | cmpwi %r3, 0 beq- ret_nil lwz %r5, 0(%r3) lwz %r5, 32(%r5) lookup: | | | | | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | cmpwi %r3, 0 beq- ret_nil lwz %r5, 0(%r3) lwz %r5, 32(%r5) lookup: #ifdef OF_SELUID24 lbz %r6, 1(%r4) #endif lbz %r7, 2(%r4) lbz %r8, 3(%r4) #ifdef OF_SELUID24 slwi %r6, %r6, 2 #endif slwi %r7, %r7, 2 slwi %r8, %r8, 2 #ifdef OF_SELUID24 lwzx %r5, %r5, %r6 #endif lwzx %r5, %r5, %r7 lwzx %r5, %r5, %r8 cmpwi %r5, 0 beq- forward |
︙ | ︙ |
Modified src/runtime/lookup-x86-elf.S from [91527592d6] to [8659bceb2f].
︙ | ︙ | |||
27 28 29 30 31 32 33 | movl (%edx), %edx movl 32(%edx), %edx lookup: movl 8(%esp), %eax | | | 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | movl (%edx), %edx movl 32(%edx), %edx lookup: movl 8(%esp), %eax #ifdef OF_SELUID24 movzbl 2(%eax), %ecx movl (%edx,%ecx,4), %edx #endif movzbl 1(%eax), %ecx movl (%edx,%ecx,4), %edx movzbl (%eax), %ecx movl (%edx,%ecx,4), %eax |
︙ | ︙ |
Modified src/runtime/runtime-private.h from [8b51aa0f01] to [8504443dc5].
︙ | ︙ | |||
102 103 104 105 106 107 108 | struct objc_hashtable_bucket **data; }; struct objc_sparsearray { struct objc_sparsearray_level2 *buckets[256]; }; | | | 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | struct objc_hashtable_bucket **data; }; struct objc_sparsearray { struct objc_sparsearray_level2 *buckets[256]; }; #ifdef OF_SELUID24 struct objc_sparsearray_level2 { struct objc_sparsearray_level3 *buckets[256]; BOOL empty; }; struct objc_sparsearray_level3 { const void *buckets[256]; |
︙ | ︙ | |||
158 159 160 161 162 163 164 | extern void objc_global_mutex_lock(void); extern void objc_global_mutex_unlock(void); extern void objc_global_mutex_free(void); static inline void* objc_sparsearray_get(const struct objc_sparsearray *s, uint32_t idx) { | | | 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | extern void objc_global_mutex_lock(void); extern void objc_global_mutex_unlock(void); extern void objc_global_mutex_free(void); static inline void* objc_sparsearray_get(const struct objc_sparsearray *s, uint32_t idx) { #ifdef OF_SELUID24 uint8_t i = idx >> 16; uint8_t j = idx >> 8; uint8_t k = idx; return (void*)s->buckets[i]->buckets[j]->buckets[k]; #else uint8_t i = idx >> 8; |
︙ | ︙ |
Modified src/runtime/selector.m from [80ce19c002] to [2845ace0ff].
︙ | ︙ | |||
19 20 21 22 23 24 25 | #include <stdio.h> #include <stdlib.h> #include <string.h> #import "runtime.h" #import "runtime-private.h" | | | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <stdio.h> #include <stdlib.h> #include <string.h> #import "runtime.h" #import "runtime-private.h" #ifdef OF_SELUID24 # define SEL_MAX 0xFFFFFF #else # define SEL_MAX 0xFFFF #endif static struct objc_hashtable *selectors = NULL; static uint32_t selectors_cnt = 0; |
︙ | ︙ |
Modified src/runtime/sparsearray.m from [ac1c630c4c] to [08f66117d0].
︙ | ︙ | |||
19 20 21 22 23 24 25 | #include <stdio.h> #include <stdlib.h> #import "runtime.h" #import "runtime-private.h" static struct objc_sparsearray_level2 *empty_level2 = NULL; | | | | | | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | #include <stdio.h> #include <stdlib.h> #import "runtime.h" #import "runtime-private.h" static struct objc_sparsearray_level2 *empty_level2 = NULL; #ifdef OF_SELUID24 static struct objc_sparsearray_level3 *empty_level3 = NULL; #endif static void init(void) { uint_fast16_t i; empty_level2 = malloc(sizeof(struct objc_sparsearray_level2)); if (empty_level2 == NULL) OBJC_ERROR("Not enough memory to allocate sparse array!"); empty_level2->empty = YES; #ifdef OF_SELUID24 empty_level3 = malloc(sizeof(struct objc_sparsearray_level3)); if (empty_level3 == NULL) OBJC_ERROR("Not enough memory to allocate sparse array!"); empty_level3->empty = YES; #endif #ifdef OF_SELUID24 for (i = 0; i < 256; i++) { empty_level2->buckets[i] = empty_level3; empty_level3->buckets[i] = NULL; } #else for (i = 0; i < 256; i++) empty_level2->buckets[i] = NULL; #endif } struct objc_sparsearray* objc_sparsearray_new(void) { struct objc_sparsearray *s; uint_fast16_t i; #ifdef OF_SELUID24 if (empty_level2 == NULL || empty_level3 == NULL) init(); #else if (empty_level2 == NULL) init(); #endif |
︙ | ︙ | |||
81 82 83 84 85 86 87 | } void objc_sparsearray_copy(struct objc_sparsearray *dst, struct objc_sparsearray *src) { uint_fast16_t i, j; | | | | 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | } void objc_sparsearray_copy(struct objc_sparsearray *dst, struct objc_sparsearray *src) { uint_fast16_t i, j; #ifdef OF_SELUID24 uint_fast16_t k; #endif uint32_t idx; for (i = 0; i < 256; i++) { if (src->buckets[i]->empty) continue; #ifdef OF_SELUID24 for (j = 0; j < 256; j++) { if (src->buckets[i]->buckets[j]->empty) continue; for (k = 0; k < 256; k++) { const void *obj; |
︙ | ︙ | |||
127 128 129 130 131 132 133 | #endif } } void objc_sparsearray_set(struct objc_sparsearray *s, uint32_t idx, const void *obj) { | | | 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | #endif } } void objc_sparsearray_set(struct objc_sparsearray *s, uint32_t idx, const void *obj) { #ifdef OF_SELUID24 uint8_t i = idx >> 16; uint8_t j = idx >> 8; uint8_t k = idx; #else uint8_t i = idx >> 8; uint8_t j = idx; #endif |
︙ | ︙ | |||
149 150 151 152 153 154 155 | if (t == NULL) OBJC_ERROR("Not enough memory to insert into sparse " "array!"); t->empty = NO; for (l = 0; l < 256; l++) | | | | 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | if (t == NULL) OBJC_ERROR("Not enough memory to insert into sparse " "array!"); t->empty = NO; for (l = 0; l < 256; l++) #ifdef OF_SELUID24 t->buckets[l] = empty_level3; #else t->buckets[l] = NULL; #endif s->buckets[i] = t; } #ifdef OF_SELUID24 if (s->buckets[i]->buckets[j]->empty) { struct objc_sparsearray_level3 *t; uint_fast16_t l; t = malloc(sizeof(struct objc_sparsearray_level3)); if (t == NULL) |
︙ | ︙ | |||
187 188 189 190 191 192 193 | #endif } void objc_sparsearray_free(struct objc_sparsearray *s) { uint_fast16_t i; | | | | | | 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 | #endif } void objc_sparsearray_free(struct objc_sparsearray *s) { uint_fast16_t i; #ifdef OF_SELUID24 uint_fast16_t j; #endif for (i = 0; i < 256; i++) { #ifdef OF_SELUID24 if (s->buckets[i]->empty) continue; for (j = 0; j < 256; j++) if (!s->buckets[i]->buckets[j]->empty) free(s->buckets[i]->buckets[j]); #endif free(s->buckets[i]); } free(s); } void objc_sparsearray_cleanup(void) { if (empty_level2 != NULL) free(empty_level2); #ifdef OF_SELUID24 if (empty_level3 != NULL) free(empty_level3); #endif empty_level2 = NULL; #ifdef OF_SELUID24 empty_level3 = NULL; #endif } |