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

Side by Side Diff: src/arm/cpu-arm.cc

Issue 6822025: ARM: Remove support for ABI prior to EABI (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Review comments addresses Created 9 years, 8 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/arm/constants-arm.h ('k') | src/arm/macro-assembler-arm.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. 1 // Copyright 2006-2009 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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 // Ideally, we would call 68 // Ideally, we would call
69 // syscall(__ARM_NR_cacheflush, start, 69 // syscall(__ARM_NR_cacheflush, start,
70 // reinterpret_cast<intptr_t>(start) + size, 0); 70 // reinterpret_cast<intptr_t>(start) + size, 0);
71 // however, syscall(int, ...) is not supported on all platforms, especially 71 // however, syscall(int, ...) is not supported on all platforms, especially
72 // not when using EABI, so we call the __ARM_NR_cacheflush syscall directly. 72 // not when using EABI, so we call the __ARM_NR_cacheflush syscall directly.
73 73
74 register uint32_t beg asm("a1") = reinterpret_cast<uint32_t>(start); 74 register uint32_t beg asm("a1") = reinterpret_cast<uint32_t>(start);
75 register uint32_t end asm("a2") = 75 register uint32_t end asm("a2") =
76 reinterpret_cast<uint32_t>(start) + size; 76 reinterpret_cast<uint32_t>(start) + size;
77 register uint32_t flg asm("a3") = 0; 77 register uint32_t flg asm("a3") = 0;
78 #ifdef __ARM_EABI__ 78 #if defined (__arm__) && !defined(__thumb__)
79 #if defined (__arm__) && !defined(__thumb__) 79 // __arm__ may be defined in thumb mode.
80 // __arm__ may be defined in thumb mode. 80 register uint32_t scno asm("r7") = __ARM_NR_cacheflush;
81 register uint32_t scno asm("r7") = __ARM_NR_cacheflush; 81 asm volatile(
82 asm volatile( 82 "svc 0x0"
83 "svc 0x0" 83 : "=r" (beg)
84 : "=r" (beg) 84 : "0" (beg), "r" (end), "r" (flg), "r" (scno));
85 : "0" (beg), "r" (end), "r" (flg), "r" (scno));
86 #else
87 // r7 is reserved by the EABI in thumb mode.
88 asm volatile(
89 "@ Enter ARM Mode \n\t"
90 "adr r3, 1f \n\t"
91 "bx r3 \n\t"
92 ".ALIGN 4 \n\t"
93 ".ARM \n"
94 "1: push {r7} \n\t"
95 "mov r7, %4 \n\t"
96 "svc 0x0 \n\t"
97 "pop {r7} \n\t"
98 "@ Enter THUMB Mode\n\t"
99 "adr r3, 2f+1 \n\t"
100 "bx r3 \n\t"
101 ".THUMB \n"
102 "2: \n\t"
103 : "=r" (beg)
104 : "0" (beg), "r" (end), "r" (flg), "r" (__ARM_NR_cacheflush)
105 : "r3");
106 #endif
107 #else 85 #else
108 #if defined (__arm__) && !defined(__thumb__) 86 // r7 is reserved by the EABI in thumb mode.
109 // __arm__ may be defined in thumb mode. 87 asm volatile(
110 asm volatile( 88 "@ Enter ARM Mode \n\t"
111 "svc %1" 89 "adr r3, 1f \n\t"
112 : "=r" (beg) 90 "bx r3 \n\t"
113 : "i" (__ARM_NR_cacheflush), "0" (beg), "r" (end), "r" (flg)); 91 ".ALIGN 4 \n\t"
114 #else 92 ".ARM \n"
115 // Do not use the value of __ARM_NR_cacheflush in the inline assembly 93 "1: push {r7} \n\t"
116 // below, because the thumb mode value would be used, which would be 94 "mov r7, %4 \n\t"
117 // wrong, since we switch to ARM mode before executing the svc instruction 95 "svc 0x0 \n\t"
118 asm volatile( 96 "pop {r7} \n\t"
119 "@ Enter ARM Mode \n\t" 97 "@ Enter THUMB Mode\n\t"
120 "adr r3, 1f \n\t" 98 "adr r3, 2f+1 \n\t"
121 "bx r3 \n\t" 99 "bx r3 \n\t"
122 ".ALIGN 4 \n\t" 100 ".THUMB \n"
123 ".ARM \n" 101 "2: \n\t"
124 "1: svc 0x9f0002 \n" 102 : "=r" (beg)
125 "@ Enter THUMB Mode\n\t" 103 : "0" (beg), "r" (end), "r" (flg), "r" (__ARM_NR_cacheflush)
126 "adr r3, 2f+1 \n\t" 104 : "r3");
127 "bx r3 \n\t"
128 ".THUMB \n"
129 "2: \n\t"
130 : "=r" (beg)
131 : "0" (beg), "r" (end), "r" (flg)
132 : "r3");
133 #endif
134 #endif 105 #endif
135 #endif 106 #endif
136 } 107 }
137 108
138 109
139 void CPU::DebugBreak() { 110 void CPU::DebugBreak() {
140 #if !defined (__arm__) || !defined(CAN_USE_ARMV5_INSTRUCTIONS) 111 #if !defined (__arm__) || !defined(CAN_USE_ARMV5_INSTRUCTIONS)
141 UNIMPLEMENTED(); // when building ARM emulator target 112 UNIMPLEMENTED(); // when building ARM emulator target
142 #else 113 #else
143 asm volatile("bkpt 0"); 114 asm volatile("bkpt 0");
144 #endif 115 #endif
145 } 116 }
146 117
147 } } // namespace v8::internal 118 } } // namespace v8::internal
148 119
149 #endif // V8_TARGET_ARCH_ARM 120 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/constants-arm.h ('k') | src/arm/macro-assembler-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698