]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add test cases for
authorJulian Seward <jseward@acm.org>
Thu, 4 Jul 2013 15:29:07 +0000 (15:29 +0000)
committerJulian Seward <jseward@acm.org>
Thu, 4 Jul 2013 15:29:07 +0000 (15:29 +0000)
(T1) STRBT reg+#imm8
(T1) STRHT reg+#imm8
(T1) LDRBT reg+#imm8
(T1) LDRSBT reg+#imm8

Pertaining to: 319858 319932 320083 321693 321148

(Vasily, w.golubev@mail.ru)

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13445

none/tests/arm/ldrt.c
none/tests/arm/ldrt.stdout.exp

index 93fdcdc431aea20efe8435a0db99483792ae0842..0f273a3b7efbb0af5e031371b6005a95e0db411c 100644 (file)
@@ -26,6 +26,42 @@ __attribute__((noinline)) void do_strt_imm_132 ( unsigned char* p, UInt val )
   );
 }
 
+__attribute__((noinline)) void do_strbt_imm_132 ( unsigned char* p, UInt* val )
+{
+  __asm__ __volatile__(
+     "mov r5, %0 ; ldr r6, [r5] ; mov r5, %1; strbt r6, [r5, #132]"
+      : : "r"(val), "r"(p) : "r5", "r6", "memory"
+  );
+}
+
+__attribute__((noinline)) void do_strht_imm_132 ( unsigned char* p, UInt* val )
+{
+  __asm__ __volatile__(
+     "mov r5, %0 ; ldr r6, [r5] ; mov r5, %1; strht r6, [r5, #132]"
+      : : "r"(val), "r"(p) : "r5", "r6", "memory"
+  );
+}
+
+__attribute__((noinline)) UInt do_ldrbt_imm_2 (unsigned char* val)
+{
+  UInt res;
+  __asm__ __volatile__(
+     "mov r4, %1 ; ldrbt r5, [r4, #2]; mov %0, r5"
+     : "=r"(res) : "r"(val) : "r4", "r5"
+  );
+  return res;
+}
+
+__attribute__((noinline)) UInt do_ldrsbt_imm_2 (unsigned char* val)
+{
+  UInt res;
+  __asm__ __volatile__(
+     "mov r4, %1 ; ldrsbt r5, [r4, #2]; mov %0, r5"
+     : "=r"(res) : "r"(val) : "r4", "r5"
+  );
+  return res;
+}
+
 int main ( void )
 {
   UInt i;
@@ -43,5 +79,30 @@ int main ( void )
          c[131], c[132], c[133], c[134], c[135], c[136],
          131, 200, 150, 100, 10, 136);
   free(c);
+
+  UInt val_bt = 0b11111111;
+  unsigned char* d = malloc(256);
+  for (i = 0; i < 256; i++) d[i] = (unsigned char)i;
+  do_strbt_imm_132(d, &val_bt);
+  printf("result is %u %u %u (should be %u %u %u)\n",
+         d[131], d[132], d[133], 131, 255, 133);
+  free(d);
+
+  UInt val_ht = 0xFFFF;
+  unsigned char* e = malloc(256);
+  for (i = 0; i < 256; i++) e[i] = (unsigned char)i;
+  do_strht_imm_132(e, &val_ht);
+  printf("result is %u %u %u %u (should be %u %u %u %u)\n",
+         e[131], e[132], e[133], e[134], 131, 255, 255, 134);
+  free(e);
+
+  UInt val_ldrbt = (200 << 0) | (150 << 8) | (137 << 16) | (10 << 24);
+  printf("result is %u (should be %u)\n",
+         do_ldrbt_imm_2((unsigned char*)&val_ldrbt), 137);
+
+  UInt val_ldrsbt = (200 << 0) | (150 << 8) | (254 << 16) | (10 << 24);
+  printf("result is %u (should be %u)\n",
+         do_ldrsbt_imm_2((unsigned char*)&val_ldrsbt), 4294967294);
+
   return 0;
 }
index ed9139ef1480d95c0b40917df13a0866bd432edf..1c4fe2b52619c8e318f0529962f3e29206a82809 100644 (file)
@@ -1,2 +1,6 @@
 result is 0x87868584 (should be 0x87868584)
 result is 131 200 150 100 10 136 (should be 131 200 150 100 10 136)
+result is 131 255 133 (should be 131 255 133)
+result is 131 255 255 134 (should be 131 255 255 134)
+result is 137 (should be 137)
+result is 4294967294 (should be 4294967294)