Mercurial > repos > tabletprog
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 ] |