comparison cbackend.js @ 336:2a0463c46913

Add hash method to float types and make hash always return a 32-bit int
author Michael Pavone <pavone@retrodev.com>
date Fri, 03 Apr 2015 23:07:06 -0700
parents 61f5b794d939
children 7279e21dad68
comparison
equal deleted inserted replaced
335:79a14e41b79a 336:2a0463c46913
820 vars: {}, 820 vars: {},
821 lines: [ 821 lines: [
822 'return ' + toplevel.moduleVar('true') + ';' 822 'return ' + toplevel.moduleVar('true') + ';'
823 ] 823 ]
824 }); 824 });
825 intObj.addMessage('hash', { 825 if (bits == 32 && !unsigned) {
826 vars: {}, 826 intObj.addMessage('hash', {
827 lines: [ 827 vars: {},
828 'return &(self->header);' 828 lines: [
829 ] 829 'return &(self->header);'
830 }); 830 ]
831 });
832 } else {
833 intObj.addMessage('hash', {
834 vars: {
835 int32ret: 'obj_int32 *'
836 },
837 lines: [
838 'int32ret = make_object(&obj_int32_meta, NULL, 0);',
839 bits < 64 ? 'int32ret->num = self->num;' : 'int32ret->num = self->num ^ (self->num >> 32);',
840 'return &(int32ret->header);'
841 ]
842 });
843 }
831 intObj.addMessage('signed?', { 844 intObj.addMessage('signed?', {
832 vars: {}, 845 vars: {},
833 lines: [ 846 lines: [
834 'return ' + toplevel.moduleVar(unsigned ? 'false' : 'true') + ';' 847 'return ' + toplevel.moduleVar(unsigned ? 'false' : 'true') + ';'
835 ] 848 ]
899 'sprintf(str->data, "%f", self->num);', 912 'sprintf(str->data, "%f", self->num);',
900 'str->len = str->bytes = strlen(str->data);', 913 'str->len = str->bytes = strlen(str->data);',
901 'return &(str->header);' 914 'return &(str->header);'
902 ] 915 ]
903 }); 916 });
917
918 floatObj.addMessage('hash', {
919 vars: {
920 intptr: 'int32_t *',
921 int32ret: 'obj_int32 *'
922 },
923 lines: [
924 'intptr = (int32_t *)&self->num;',
925 'int32ret = make_object(&obj_int32_meta, NULL, 0);',
926 'int32ret->num = *intptr' + (size == 64 ? ' ^ intptr[1];' : ';'),
927 'return &(int32ret->header);'
928 ]
929 });
930
904 floatObj.addMessage('f' + bits, { 931 floatObj.addMessage('f' + bits, {
905 vars: {}, 932 vars: {},
906 lines: [ 933 lines: [
907 'return &(self->header);' 934 'return &(self->header);'
908 ] 935 ]