Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: test/cctest/test-assembler-mips64.cc

Issue 558163006: MIPS64: Fix move operations from coprocessor in simulator. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/mips64/simulator-mips64.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 TEST(MIPS4) { 346 TEST(MIPS4) {
347 // Test moves between floating point and integer registers. 347 // Test moves between floating point and integer registers.
348 CcTest::InitializeVM(); 348 CcTest::InitializeVM();
349 Isolate* isolate = CcTest::i_isolate(); 349 Isolate* isolate = CcTest::i_isolate();
350 HandleScope scope(isolate); 350 HandleScope scope(isolate);
351 351
352 typedef struct { 352 typedef struct {
353 double a; 353 double a;
354 double b; 354 double b;
355 double c; 355 double c;
356 double d;
357 int64_t high;
358 int64_t low;
356 } T; 359 } T;
357 T t; 360 T t;
358 361
359 Assembler assm(isolate, NULL, 0); 362 Assembler assm(isolate, NULL, 0);
360 Label L, C; 363 Label L, C;
361 364
362 __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, a)) ); 365 __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, a)));
363 __ ldc1(f5, MemOperand(a0, OFFSET_OF(T, b)) ); 366 __ ldc1(f5, MemOperand(a0, OFFSET_OF(T, b)));
364 367
365 // Swap f4 and f5, by using 3 integer registers, a4-a6, 368 // Swap f4 and f5, by using 3 integer registers, a4-a6,
366 // both two 32-bit chunks, and one 64-bit chunk. 369 // both two 32-bit chunks, and one 64-bit chunk.
367 // mXhc1 is mips32/64-r2 only, not r1, 370 // mXhc1 is mips32/64-r2 only, not r1,
368 // but we will not support r1 in practice. 371 // but we will not support r1 in practice.
369 __ mfc1(a4, f4); 372 __ mfc1(a4, f4);
370 __ mfhc1(a5, f4); 373 __ mfhc1(a5, f4);
371 __ dmfc1(a6, f5); 374 __ dmfc1(a6, f5);
372 375
373 __ mtc1(a4, f5); 376 __ mtc1(a4, f5);
374 __ mthc1(a5, f5); 377 __ mthc1(a5, f5);
375 __ dmtc1(a6, f4); 378 __ dmtc1(a6, f4);
376 379
377 // Store the swapped f4 and f5 back to memory. 380 // Store the swapped f4 and f5 back to memory.
378 __ sdc1(f4, MemOperand(a0, OFFSET_OF(T, a)) ); 381 __ sdc1(f4, MemOperand(a0, OFFSET_OF(T, a)));
379 __ sdc1(f5, MemOperand(a0, OFFSET_OF(T, c)) ); 382 __ sdc1(f5, MemOperand(a0, OFFSET_OF(T, c)));
383
384 // Test sign extension of move operations from coprocessor.
385 __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, d)));
386 __ mfhc1(a4, f4);
387 __ mfc1(a5, f4);
388
389 __ sd(a4, MemOperand(a0, OFFSET_OF(T, high)));
390 __ sd(a5, MemOperand(a0, OFFSET_OF(T, low)));
380 391
381 __ jr(ra); 392 __ jr(ra);
382 __ nop(); 393 __ nop();
383 394
384 CodeDesc desc; 395 CodeDesc desc;
385 assm.GetCode(&desc); 396 assm.GetCode(&desc);
386 Handle<Code> code = isolate->factory()->NewCode( 397 Handle<Code> code = isolate->factory()->NewCode(
387 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 398 desc, Code::ComputeFlags(Code::STUB), Handle<Code>());
388 F3 f = FUNCTION_CAST<F3>(code->entry()); 399 F3 f = FUNCTION_CAST<F3>(code->entry());
389 t.a = 1.5e22; 400 t.a = 1.5e22;
390 t.b = 2.75e11; 401 t.b = 2.75e11;
391 t.c = 17.17; 402 t.c = 17.17;
403 t.d = -2.75e11;
392 Object* dummy = CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0); 404 Object* dummy = CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0);
393 USE(dummy); 405 USE(dummy);
394 406
395 CHECK_EQ(2.75e11, t.a); 407 CHECK_EQ(2.75e11, t.a);
396 CHECK_EQ(2.75e11, t.b); 408 CHECK_EQ(2.75e11, t.b);
397 CHECK_EQ(1.5e22, t.c); 409 CHECK_EQ(1.5e22, t.c);
410 CHECK_EQ(0xffffffffc25001d1L, t.high);
411 CHECK_EQ(0xffffffffbf800000L, t.low);
398 } 412 }
399 413
400 414
401 TEST(MIPS5) { 415 TEST(MIPS5) {
402 // Test conversions between doubles and integers. 416 // Test conversions between doubles and integers.
403 CcTest::InitializeVM(); 417 CcTest::InitializeVM();
404 Isolate* isolate = CcTest::i_isolate(); 418 Isolate* isolate = CcTest::i_isolate();
405 HandleScope scope(isolate); 419 HandleScope scope(isolate);
406 420
407 typedef struct { 421 typedef struct {
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
863 int32_t swr_0; 877 int32_t swr_0;
864 int32_t swr_1; 878 int32_t swr_1;
865 int32_t swr_2; 879 int32_t swr_2;
866 int32_t swr_3; 880 int32_t swr_3;
867 } T; 881 } T;
868 T t; 882 T t;
869 883
870 Assembler assm(isolate, NULL, 0); 884 Assembler assm(isolate, NULL, 0);
871 885
872 // Test all combinations of LWL and vAddr. 886 // Test all combinations of LWL and vAddr.
873 __ lw(a4, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 887 __ lw(a4, MemOperand(a0, OFFSET_OF(T, reg_init)));
874 __ lwl(a4, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 888 __ lwl(a4, MemOperand(a0, OFFSET_OF(T, mem_init)));
875 __ sw(a4, MemOperand(a0, OFFSET_OF(T, lwl_0)) ); 889 __ sw(a4, MemOperand(a0, OFFSET_OF(T, lwl_0)));
876 890
877 __ lw(a5, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 891 __ lw(a5, MemOperand(a0, OFFSET_OF(T, reg_init)));
878 __ lwl(a5, MemOperand(a0, OFFSET_OF(T, mem_init) + 1) ); 892 __ lwl(a5, MemOperand(a0, OFFSET_OF(T, mem_init) + 1));
879 __ sw(a5, MemOperand(a0, OFFSET_OF(T, lwl_1)) ); 893 __ sw(a5, MemOperand(a0, OFFSET_OF(T, lwl_1)));
880 894
881 __ lw(a6, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 895 __ lw(a6, MemOperand(a0, OFFSET_OF(T, reg_init)));
882 __ lwl(a6, MemOperand(a0, OFFSET_OF(T, mem_init) + 2) ); 896 __ lwl(a6, MemOperand(a0, OFFSET_OF(T, mem_init) + 2));
883 __ sw(a6, MemOperand(a0, OFFSET_OF(T, lwl_2)) ); 897 __ sw(a6, MemOperand(a0, OFFSET_OF(T, lwl_2)));
884 898
885 __ lw(a7, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 899 __ lw(a7, MemOperand(a0, OFFSET_OF(T, reg_init)));
886 __ lwl(a7, MemOperand(a0, OFFSET_OF(T, mem_init) + 3) ); 900 __ lwl(a7, MemOperand(a0, OFFSET_OF(T, mem_init) + 3));
887 __ sw(a7, MemOperand(a0, OFFSET_OF(T, lwl_3)) ); 901 __ sw(a7, MemOperand(a0, OFFSET_OF(T, lwl_3)));
888 902
889 // Test all combinations of LWR and vAddr. 903 // Test all combinations of LWR and vAddr.
890 __ lw(a4, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 904 __ lw(a4, MemOperand(a0, OFFSET_OF(T, reg_init)));
891 __ lwr(a4, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 905 __ lwr(a4, MemOperand(a0, OFFSET_OF(T, mem_init)));
892 __ sw(a4, MemOperand(a0, OFFSET_OF(T, lwr_0)) ); 906 __ sw(a4, MemOperand(a0, OFFSET_OF(T, lwr_0)));
893 907
894 __ lw(a5, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 908 __ lw(a5, MemOperand(a0, OFFSET_OF(T, reg_init)));
895 __ lwr(a5, MemOperand(a0, OFFSET_OF(T, mem_init) + 1) ); 909 __ lwr(a5, MemOperand(a0, OFFSET_OF(T, mem_init) + 1));
896 __ sw(a5, MemOperand(a0, OFFSET_OF(T, lwr_1)) ); 910 __ sw(a5, MemOperand(a0, OFFSET_OF(T, lwr_1)));
897 911
898 __ lw(a6, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 912 __ lw(a6, MemOperand(a0, OFFSET_OF(T, reg_init)));
899 __ lwr(a6, MemOperand(a0, OFFSET_OF(T, mem_init) + 2) ); 913 __ lwr(a6, MemOperand(a0, OFFSET_OF(T, mem_init) + 2));
900 __ sw(a6, MemOperand(a0, OFFSET_OF(T, lwr_2)) ); 914 __ sw(a6, MemOperand(a0, OFFSET_OF(T, lwr_2)) );
901 915
902 __ lw(a7, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 916 __ lw(a7, MemOperand(a0, OFFSET_OF(T, reg_init)));
903 __ lwr(a7, MemOperand(a0, OFFSET_OF(T, mem_init) + 3) ); 917 __ lwr(a7, MemOperand(a0, OFFSET_OF(T, mem_init) + 3));
904 __ sw(a7, MemOperand(a0, OFFSET_OF(T, lwr_3)) ); 918 __ sw(a7, MemOperand(a0, OFFSET_OF(T, lwr_3)) );
905 919
906 // Test all combinations of SWL and vAddr. 920 // Test all combinations of SWL and vAddr.
907 __ lw(a4, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 921 __ lw(a4, MemOperand(a0, OFFSET_OF(T, mem_init)));
908 __ sw(a4, MemOperand(a0, OFFSET_OF(T, swl_0)) ); 922 __ sw(a4, MemOperand(a0, OFFSET_OF(T, swl_0)));
909 __ lw(a4, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 923 __ lw(a4, MemOperand(a0, OFFSET_OF(T, reg_init)));
910 __ swl(a4, MemOperand(a0, OFFSET_OF(T, swl_0)) ); 924 __ swl(a4, MemOperand(a0, OFFSET_OF(T, swl_0)));
911 925
912 __ lw(a5, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 926 __ lw(a5, MemOperand(a0, OFFSET_OF(T, mem_init)));
913 __ sw(a5, MemOperand(a0, OFFSET_OF(T, swl_1)) ); 927 __ sw(a5, MemOperand(a0, OFFSET_OF(T, swl_1)));
914 __ lw(a5, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 928 __ lw(a5, MemOperand(a0, OFFSET_OF(T, reg_init)));
915 __ swl(a5, MemOperand(a0, OFFSET_OF(T, swl_1) + 1) ); 929 __ swl(a5, MemOperand(a0, OFFSET_OF(T, swl_1) + 1));
916 930
917 __ lw(a6, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 931 __ lw(a6, MemOperand(a0, OFFSET_OF(T, mem_init)));
918 __ sw(a6, MemOperand(a0, OFFSET_OF(T, swl_2)) ); 932 __ sw(a6, MemOperand(a0, OFFSET_OF(T, swl_2)));
919 __ lw(a6, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 933 __ lw(a6, MemOperand(a0, OFFSET_OF(T, reg_init)));
920 __ swl(a6, MemOperand(a0, OFFSET_OF(T, swl_2) + 2) ); 934 __ swl(a6, MemOperand(a0, OFFSET_OF(T, swl_2) + 2));
921 935
922 __ lw(a7, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 936 __ lw(a7, MemOperand(a0, OFFSET_OF(T, mem_init)));
923 __ sw(a7, MemOperand(a0, OFFSET_OF(T, swl_3)) ); 937 __ sw(a7, MemOperand(a0, OFFSET_OF(T, swl_3)));
924 __ lw(a7, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 938 __ lw(a7, MemOperand(a0, OFFSET_OF(T, reg_init)));
925 __ swl(a7, MemOperand(a0, OFFSET_OF(T, swl_3) + 3) ); 939 __ swl(a7, MemOperand(a0, OFFSET_OF(T, swl_3) + 3));
926 940
927 // Test all combinations of SWR and vAddr. 941 // Test all combinations of SWR and vAddr.
928 __ lw(a4, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 942 __ lw(a4, MemOperand(a0, OFFSET_OF(T, mem_init)));
929 __ sw(a4, MemOperand(a0, OFFSET_OF(T, swr_0)) ); 943 __ sw(a4, MemOperand(a0, OFFSET_OF(T, swr_0)));
930 __ lw(a4, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 944 __ lw(a4, MemOperand(a0, OFFSET_OF(T, reg_init)));
931 __ swr(a4, MemOperand(a0, OFFSET_OF(T, swr_0)) ); 945 __ swr(a4, MemOperand(a0, OFFSET_OF(T, swr_0)));
932 946
933 __ lw(a5, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 947 __ lw(a5, MemOperand(a0, OFFSET_OF(T, mem_init)));
934 __ sw(a5, MemOperand(a0, OFFSET_OF(T, swr_1)) ); 948 __ sw(a5, MemOperand(a0, OFFSET_OF(T, swr_1)));
935 __ lw(a5, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 949 __ lw(a5, MemOperand(a0, OFFSET_OF(T, reg_init)));
936 __ swr(a5, MemOperand(a0, OFFSET_OF(T, swr_1) + 1) ); 950 __ swr(a5, MemOperand(a0, OFFSET_OF(T, swr_1) + 1));
937 951
938 __ lw(a6, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 952 __ lw(a6, MemOperand(a0, OFFSET_OF(T, mem_init)));
939 __ sw(a6, MemOperand(a0, OFFSET_OF(T, swr_2)) ); 953 __ sw(a6, MemOperand(a0, OFFSET_OF(T, swr_2)));
940 __ lw(a6, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 954 __ lw(a6, MemOperand(a0, OFFSET_OF(T, reg_init)));
941 __ swr(a6, MemOperand(a0, OFFSET_OF(T, swr_2) + 2) ); 955 __ swr(a6, MemOperand(a0, OFFSET_OF(T, swr_2) + 2));
942 956
943 __ lw(a7, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 957 __ lw(a7, MemOperand(a0, OFFSET_OF(T, mem_init)));
944 __ sw(a7, MemOperand(a0, OFFSET_OF(T, swr_3)) ); 958 __ sw(a7, MemOperand(a0, OFFSET_OF(T, swr_3)));
945 __ lw(a7, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 959 __ lw(a7, MemOperand(a0, OFFSET_OF(T, reg_init)));
946 __ swr(a7, MemOperand(a0, OFFSET_OF(T, swr_3) + 3) ); 960 __ swr(a7, MemOperand(a0, OFFSET_OF(T, swr_3) + 3));
947 961
948 __ jr(ra); 962 __ jr(ra);
949 __ nop(); 963 __ nop();
950 964
951 CodeDesc desc; 965 CodeDesc desc;
952 assm.GetCode(&desc); 966 assm.GetCode(&desc);
953 Handle<Code> code = isolate->factory()->NewCode( 967 Handle<Code> code = isolate->factory()->NewCode(
954 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 968 desc, Code::ComputeFlags(Code::STUB), Handle<Code>());
955 F3 f = FUNCTION_CAST<F3>(code->entry()); 969 F3 f = FUNCTION_CAST<F3>(code->entry());
956 t.reg_init = 0xaabbccdd; 970 t.reg_init = 0xaabbccdd;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
994 int32_t y2; 1008 int32_t y2;
995 int32_t y3; 1009 int32_t y3;
996 int32_t y4; 1010 int32_t y4;
997 } T; 1011 } T;
998 T t; 1012 T t;
999 1013
1000 MacroAssembler assm(isolate, NULL, 0); 1014 MacroAssembler assm(isolate, NULL, 0);
1001 1015
1002 __ mov(t2, fp); // Save frame pointer. 1016 __ mov(t2, fp); // Save frame pointer.
1003 __ mov(fp, a0); // Access struct T by fp. 1017 __ mov(fp, a0); // Access struct T by fp.
1004 __ lw(a4, MemOperand(a0, OFFSET_OF(T, y)) ); 1018 __ lw(a4, MemOperand(a0, OFFSET_OF(T, y)));
1005 __ lw(a7, MemOperand(a0, OFFSET_OF(T, y4)) ); 1019 __ lw(a7, MemOperand(a0, OFFSET_OF(T, y4)));
1006 1020
1007 __ addu(a5, a4, a7); 1021 __ addu(a5, a4, a7);
1008 __ subu(t0, a4, a7); 1022 __ subu(t0, a4, a7);
1009 __ nop(); 1023 __ nop();
1010 __ push(a4); // These instructions disappear after opt. 1024 __ push(a4); // These instructions disappear after opt.
1011 __ Pop(); 1025 __ Pop();
1012 __ addu(a4, a4, a4); 1026 __ addu(a4, a4, a4);
1013 __ nop(); 1027 __ nop();
1014 __ Pop(); // These instructions disappear after opt. 1028 __ Pop(); // These instructions disappear after opt.
1015 __ push(a7); 1029 __ push(a7);
1016 __ nop(); 1030 __ nop();
1017 __ push(a7); // These instructions disappear after opt. 1031 __ push(a7); // These instructions disappear after opt.
1018 __ pop(a7); 1032 __ pop(a7);
1019 __ nop(); 1033 __ nop();
1020 __ push(a7); 1034 __ push(a7);
1021 __ pop(t0); 1035 __ pop(t0);
1022 __ nop(); 1036 __ nop();
1023 __ sw(a4, MemOperand(fp, OFFSET_OF(T, y)) ); 1037 __ sw(a4, MemOperand(fp, OFFSET_OF(T, y)));
1024 __ lw(a4, MemOperand(fp, OFFSET_OF(T, y)) ); 1038 __ lw(a4, MemOperand(fp, OFFSET_OF(T, y)));
1025 __ nop(); 1039 __ nop();
1026 __ sw(a4, MemOperand(fp, OFFSET_OF(T, y)) ); 1040 __ sw(a4, MemOperand(fp, OFFSET_OF(T, y)));
1027 __ lw(a5, MemOperand(fp, OFFSET_OF(T, y)) ); 1041 __ lw(a5, MemOperand(fp, OFFSET_OF(T, y)));
1028 __ nop(); 1042 __ nop();
1029 __ push(a5); 1043 __ push(a5);
1030 __ lw(a5, MemOperand(fp, OFFSET_OF(T, y)) ); 1044 __ lw(a5, MemOperand(fp, OFFSET_OF(T, y)));
1031 __ pop(a5); 1045 __ pop(a5);
1032 __ nop(); 1046 __ nop();
1033 __ push(a5); 1047 __ push(a5);
1034 __ lw(a6, MemOperand(fp, OFFSET_OF(T, y)) ); 1048 __ lw(a6, MemOperand(fp, OFFSET_OF(T, y)));
1035 __ pop(a5); 1049 __ pop(a5);
1036 __ nop(); 1050 __ nop();
1037 __ push(a5); 1051 __ push(a5);
1038 __ lw(a6, MemOperand(fp, OFFSET_OF(T, y)) ); 1052 __ lw(a6, MemOperand(fp, OFFSET_OF(T, y)));
1039 __ pop(a6); 1053 __ pop(a6);
1040 __ nop(); 1054 __ nop();
1041 __ push(a6); 1055 __ push(a6);
1042 __ lw(a6, MemOperand(fp, OFFSET_OF(T, y)) ); 1056 __ lw(a6, MemOperand(fp, OFFSET_OF(T, y)));
1043 __ pop(a5); 1057 __ pop(a5);
1044 __ nop(); 1058 __ nop();
1045 __ push(a5); 1059 __ push(a5);
1046 __ lw(a6, MemOperand(fp, OFFSET_OF(T, y)) ); 1060 __ lw(a6, MemOperand(fp, OFFSET_OF(T, y)));
1047 __ pop(a7); 1061 __ pop(a7);
1048 __ nop(); 1062 __ nop();
1049 1063
1050 __ mov(fp, t2); 1064 __ mov(fp, t2);
1051 __ jr(ra); 1065 __ jr(ra);
1052 __ nop(); 1066 __ nop();
1053 1067
1054 CodeDesc desc; 1068 CodeDesc desc;
1055 assm.GetCode(&desc); 1069 assm.GetCode(&desc);
1056 Handle<Code> code = isolate->factory()->NewCode( 1070 Handle<Code> code = isolate->factory()->NewCode(
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
1290 int64_t r6; 1304 int64_t r6;
1291 uint32_t ui; 1305 uint32_t ui;
1292 int32_t si; 1306 int32_t si;
1293 } T; 1307 } T;
1294 T t; 1308 T t;
1295 1309
1296 Assembler assm(isolate, NULL, 0); 1310 Assembler assm(isolate, NULL, 0);
1297 Label L, C; 1311 Label L, C;
1298 1312
1299 // Basic 32-bit word load/store, with un-signed data. 1313 // Basic 32-bit word load/store, with un-signed data.
1300 __ lw(a4, MemOperand(a0, OFFSET_OF(T, ui)) ); 1314 __ lw(a4, MemOperand(a0, OFFSET_OF(T, ui)));
1301 __ sw(a4, MemOperand(a0, OFFSET_OF(T, r1)) ); 1315 __ sw(a4, MemOperand(a0, OFFSET_OF(T, r1)));
1302 1316
1303 // Check that the data got zero-extended into 64-bit a4. 1317 // Check that the data got zero-extended into 64-bit a4.
1304 __ sd(a4, MemOperand(a0, OFFSET_OF(T, r2)) ); 1318 __ sd(a4, MemOperand(a0, OFFSET_OF(T, r2)));
1305 1319
1306 // Basic 32-bit word load/store, with SIGNED data. 1320 // Basic 32-bit word load/store, with SIGNED data.
1307 __ lw(a5, MemOperand(a0, OFFSET_OF(T, si)) ); 1321 __ lw(a5, MemOperand(a0, OFFSET_OF(T, si)));
1308 __ sw(a5, MemOperand(a0, OFFSET_OF(T, r3)) ); 1322 __ sw(a5, MemOperand(a0, OFFSET_OF(T, r3)));
1309 1323
1310 // Check that the data got sign-extended into 64-bit a4. 1324 // Check that the data got sign-extended into 64-bit a4.
1311 __ sd(a5, MemOperand(a0, OFFSET_OF(T, r4)) ); 1325 __ sd(a5, MemOperand(a0, OFFSET_OF(T, r4)));
1312 1326
1313 // 32-bit UNSIGNED word load/store, with SIGNED data. 1327 // 32-bit UNSIGNED word load/store, with SIGNED data.
1314 __ lwu(a6, MemOperand(a0, OFFSET_OF(T, si)) ); 1328 __ lwu(a6, MemOperand(a0, OFFSET_OF(T, si)));
1315 __ sw(a6, MemOperand(a0, OFFSET_OF(T, r5)) ); 1329 __ sw(a6, MemOperand(a0, OFFSET_OF(T, r5)));
1316 1330
1317 // Check that the data got zero-extended into 64-bit a4. 1331 // Check that the data got zero-extended into 64-bit a4.
1318 __ sd(a6, MemOperand(a0, OFFSET_OF(T, r6)) ); 1332 __ sd(a6, MemOperand(a0, OFFSET_OF(T, r6)));
1319 1333
1320 // lh with positive data. 1334 // lh with positive data.
1321 __ lh(a5, MemOperand(a0, OFFSET_OF(T, ui)) ); 1335 __ lh(a5, MemOperand(a0, OFFSET_OF(T, ui)));
1322 __ sw(a5, MemOperand(a0, OFFSET_OF(T, r2)) ); 1336 __ sw(a5, MemOperand(a0, OFFSET_OF(T, r2)));
1323 1337
1324 // lh with negative data. 1338 // lh with negative data.
1325 __ lh(a6, MemOperand(a0, OFFSET_OF(T, si)) ); 1339 __ lh(a6, MemOperand(a0, OFFSET_OF(T, si)));
1326 __ sw(a6, MemOperand(a0, OFFSET_OF(T, r3)) ); 1340 __ sw(a6, MemOperand(a0, OFFSET_OF(T, r3)));
1327 1341
1328 // lhu with negative data. 1342 // lhu with negative data.
1329 __ lhu(a7, MemOperand(a0, OFFSET_OF(T, si)) ); 1343 __ lhu(a7, MemOperand(a0, OFFSET_OF(T, si)));
1330 __ sw(a7, MemOperand(a0, OFFSET_OF(T, r4)) ); 1344 __ sw(a7, MemOperand(a0, OFFSET_OF(T, r4)));
1331 1345
1332 // lb with negative data. 1346 // lb with negative data.
1333 __ lb(t0, MemOperand(a0, OFFSET_OF(T, si)) ); 1347 __ lb(t0, MemOperand(a0, OFFSET_OF(T, si)));
1334 __ sw(t0, MemOperand(a0, OFFSET_OF(T, r5)) ); 1348 __ sw(t0, MemOperand(a0, OFFSET_OF(T, r5)));
1335 1349
1336 // // sh writes only 1/2 of word. 1350 // // sh writes only 1/2 of word.
1337 __ lui(t1, 0x3333); 1351 __ lui(t1, 0x3333);
1338 __ ori(t1, t1, 0x3333); 1352 __ ori(t1, t1, 0x3333);
1339 __ sw(t1, MemOperand(a0, OFFSET_OF(T, r6)) ); 1353 __ sw(t1, MemOperand(a0, OFFSET_OF(T, r6)));
1340 __ lhu(t1, MemOperand(a0, OFFSET_OF(T, si)) ); 1354 __ lhu(t1, MemOperand(a0, OFFSET_OF(T, si)));
1341 __ sh(t1, MemOperand(a0, OFFSET_OF(T, r6)) ); 1355 __ sh(t1, MemOperand(a0, OFFSET_OF(T, r6)));
1342 1356
1343 __ jr(ra); 1357 __ jr(ra);
1344 __ nop(); 1358 __ nop();
1345 1359
1346 CodeDesc desc; 1360 CodeDesc desc;
1347 assm.GetCode(&desc); 1361 assm.GetCode(&desc);
1348 Handle<Code> code = isolate->factory()->NewCode( 1362 Handle<Code> code = isolate->factory()->NewCode(
1349 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 1363 desc, Code::ComputeFlags(Code::STUB), Handle<Code>());
1350 F3 f = FUNCTION_CAST<F3>(code->entry()); 1364 F3 f = FUNCTION_CAST<F3>(code->entry());
1351 t.ui = 0x44332211; 1365 t.ui = 0x44332211;
(...skipping 14 matching lines...) Expand all
1366 // Signed data, 32 & 64. 1380 // Signed data, 32 & 64.
1367 CHECK_EQ(0x33333333ffffbbccL, t.r3); 1381 CHECK_EQ(0x33333333ffffbbccL, t.r3);
1368 CHECK_EQ(0xffffffff0000bbccL, t.r4); 1382 CHECK_EQ(0xffffffff0000bbccL, t.r4);
1369 1383
1370 // Signed data, 32 & 64. 1384 // Signed data, 32 & 64.
1371 CHECK_EQ(0x55555555ffffffccL, t.r5); 1385 CHECK_EQ(0x55555555ffffffccL, t.r5);
1372 CHECK_EQ(0x000000003333bbccL, t.r6); 1386 CHECK_EQ(0x000000003333bbccL, t.r6);
1373 } 1387 }
1374 1388
1375 #undef __ 1389 #undef __
OLDNEW
« no previous file with comments | « src/mips64/simulator-mips64.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698