diff options
Diffstat (limited to 'libgo/runtime/go-construct-map.c')
-rw-r--r-- | libgo/runtime/go-construct-map.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/libgo/runtime/go-construct-map.c b/libgo/runtime/go-construct-map.c index 4bd79d20058..c1a8bb72efa 100644 --- a/libgo/runtime/go-construct-map.c +++ b/libgo/runtime/go-construct-map.c @@ -9,25 +9,30 @@ #include <stdlib.h> #include "runtime.h" -#include "map.h" -struct __go_map * -__go_construct_map (const struct __go_map_descriptor *descriptor, +extern void *makemap (const struct __go_map_type *, int64_t hint, + void *, void *) + __asm__ (GOSYM_PREFIX "runtime.makemap"); + +extern void mapassign1 (const struct __go_map_type *, void *hmap, + const void *key, const void *val) + __asm__ (GOSYM_PREFIX "runtime.mapassign1"); + +void * +__go_construct_map (const struct __go_map_type *type, uintptr_t count, uintptr_t entry_size, - uintptr_t val_offset, uintptr_t val_size, - const void *ventries) + uintptr_t val_offset, const void *ventries) { - struct __go_map *ret; + void *ret; const unsigned char *entries; uintptr_t i; - ret = __go_new_map (descriptor, count); + ret = makemap(type, (int64_t) count, NULL, NULL); entries = (const unsigned char *) ventries; for (i = 0; i < count; ++i) { - void *val = __go_map_index (ret, entries, 1); - __builtin_memcpy (val, entries + val_offset, val_size); + mapassign1 (type, ret, entries, entries + val_offset); entries += entry_size; } |