comparison cbackend.js @ 325:4a79311dbd29

Added conversion methods between integer and float types
author Michael Pavone <pavone@retrodev.com>
date Tue, 24 Mar 2015 21:49:45 -0700
parents 1debeb21dd47
children eef8a5cea812
comparison
equal deleted inserted replaced
324:615f23450f8f 325:4a79311dbd29
859 'return &(' + retName + '->header);' 859 'return &(' + retName + '->header);'
860 ] 860 ]
861 }); 861 });
862 } 862 }
863 } 863 }
864 if (size > 16) {
865 var retType = 'obj_float' + size;
866 var retName = 'retfloat' + size;
867 var vars = {};
868 vars[retName] = retType + ' *';
869 intObj.addMessage((size > bits ? 'f' : 'truncF') + size, {
870 vars: vars,
871 lines: [
872 retName + ' = make_object(&' + retType + '_meta, NULL, 0);',
873 retName + '->num = self->num;',
874 'return &(' + retName + '->header);'
875 ]
876 })
877 }
864 } 878 }
865 879
866 return intObj; 880 return intObj;
867 } 881 }
868 882
898 'trans = make_object(&obj_float' + (bits == 32 ? 64 : 32) + '_meta, NULL, 0);', 912 'trans = make_object(&obj_float' + (bits == 32 ? 64 : 32) + '_meta, NULL, 0);',
899 'trans->num = self->num;', 913 'trans->num = self->num;',
900 'return &(trans->header);' 914 'return &(trans->header);'
901 ] 915 ]
902 }); 916 });
917 var sizes = [8, 16, 32, 64];
918 var prefixes = ['U', ''];
919 for (var i = 0; i < sizes.length; i++) {
920 for (var j = 0; j < prefixes.length; j++) {
921 var ret = 'ret' + i + j;
922 var vars = {};
923 var retType = 'obj_' + prefixes[j].toLowerCase() + 'int' + sizes[i];
924 vars[ret] = retType + ' *';
925 floatObj.addMessage('trunc' + prefixes[j] + 'Int' + sizes[i], {
926 vars: vars,
927 lines: [
928 ret + ' = make_object(&' + retType + '_meta, NULL, 0);',
929 ret + '->num = self->num;',
930 'return &(' + ret + '->header);'
931 ]
932 });
933 }
934 }
903 return floatObj; 935 return floatObj;
904 } 936 }
905 937
906 function makeCPointer() 938 function makeCPointer()
907 { 939 {