|
1845 | 1845 | // SPDX-License-Identifier: Apache-2.0 |
1846 | 1846 |
|
1847 | 1847 | /// Definitions and macros for compiled-in harnessing of C and C++ target |
1848 | | -/// software for the RISC-V (32-bit) architecture |
| 1848 | +/// software for the aarch64 architecture |
1849 | 1849 |
|
1850 | 1850 | #ifndef TSFFS_H |
1851 | 1851 | #define TSFFS_H |
|
1883 | 1883 | /// * `arg0` - The value to place in register `r10` |
1884 | 1884 | #define __orr_extended1(value, arg0) \ |
1885 | 1885 | __asm__ __volatile__( \ |
1886 | | - "mov x28, %0; orr x" __tostring(value) ", x" __tostring( \ |
| 1886 | + "mov x10, %0; orr x" __tostring(value) ", x" __tostring( \ |
1887 | 1887 | value) ", x" __tostring(value) \ |
1888 | 1888 | : \ |
1889 | | - : "g"(arg0)); |
| 1889 | + : "g"((unsigned long long)arg0) \ |
| 1890 | + : "x10"); |
1890 | 1891 |
|
1891 | 1892 | /// __orr_extended2 |
1892 | 1893 | /// |
|
1901 | 1902 | /// * `arg1` - The value to place in register `r9` |
1902 | 1903 | #define __orr_extended2(value, arg0, arg1) \ |
1903 | 1904 | __asm__ __volatile__( \ |
1904 | | - "mov x28, %0; mov x27, %1; orr x" __tostring(value) ", x" __tostring( \ |
| 1905 | + "mov x10, %0; mov x9, %1; orr x" __tostring(value) ", x" __tostring( \ |
1905 | 1906 | value) ", x" __tostring(value) \ |
1906 | 1907 | : \ |
1907 | | - : "r"(arg0), "r"(arg1)); |
| 1908 | + : "r"((unsigned long long)arg0), "r"((unsigned long long)arg1) \ |
| 1909 | + : "x10", "x9"); |
1908 | 1910 |
|
1909 | 1911 | /// __orr_extended3 |
1910 | 1912 | /// |
|
1918 | 1920 | /// * `arg0` - The value to place in register `r10` |
1919 | 1921 | /// * `arg1` - The value to place in register `r9` |
1920 | 1922 | /// * `arg2` - The value to place in register `r8` |
1921 | | -#define __orr_extended3(value, arg0, arg1, arg2) \ |
1922 | | - __asm__ __volatile__( \ |
1923 | | - "mov x28, %0; mov x27, %1; mov x26, %2; orr x" __tostring( \ |
1924 | | - value) ", x" __tostring(value) ", x" __tostring(value) \ |
1925 | | - : \ |
1926 | | - : "r"(arg0), "r"(arg1), "r"(arg2)); |
| 1923 | +#define __orr_extended3(value, arg0, arg1, arg2) \ |
| 1924 | + __asm__ __volatile__( \ |
| 1925 | + "mov x10, %0; mov x9, %1; mov x8, %2; orr x" __tostring( \ |
| 1926 | + value) ", x" __tostring(value) ", x" __tostring(value) \ |
| 1927 | + : \ |
| 1928 | + : "r"((unsigned long long)arg0), "r"((unsigned long long)arg1), \ |
| 1929 | + "r"((unsigned long long)arg2) \ |
| 1930 | + : "x10", "x9"); |
1927 | 1931 |
|
1928 | 1932 | /// __orr_extended4 |
1929 | 1933 | /// |
|
1940 | 1944 | /// * `arg3` - The value to place in register `r7` |
1941 | 1945 | #define __orr_extended4(value, arg0, arg1, arg2, arg3) \ |
1942 | 1946 | __asm__ __volatile__( \ |
1943 | | - "mov x28, %0; mov x27, %1; mov x26, %2; mov x25, %3; " \ |
| 1947 | + "mov x10, %0; mov x9, %1; mov x8, %2; mov x7, %3; " \ |
1944 | 1948 | "orr x" __tostring(value) ", x" __tostring(value) ", x" __tostring( \ |
1945 | 1949 | value) \ |
1946 | 1950 | : \ |
1947 | | - : "r"(arg0), "r"(arg1), "r"(arg2), "r"(arg3)); |
| 1951 | + : "r"((unsigned long long)arg0), "r"((unsigned long long)arg1), \ |
| 1952 | + "r"((unsigned long long)arg2), "r"((unsigned long long)arg3) \ |
| 1953 | + : "x10", "x9"); |
1948 | 1954 |
|
1949 | 1955 | /// The default index number used for magic instructions. All magic instructions |
1950 | 1956 | /// support multiple start and stop indices, which defaults to 0 if not |
1951 | 1957 | /// specified. |
1952 | | -#define DEFAULT_INDEX (0x0000U) |
| 1958 | +#define DEFAULT_INDEX (0x0000) |
1953 | 1959 |
|
1954 | 1960 | /// Pseudo-hypercall number to signal the fuzzer to use the first argument to |
1955 | 1961 | /// the magic instruction as the pointer to the testcase buffer and the second |
|
2021 | 2027 | /// ``` |
2022 | 2028 | /// unsigned char buffer[1024]; |
2023 | 2029 | /// size_t size; |
2024 | | -/// HARNESS_START_INDEX(0x0001U, buffer, &size); |
| 2030 | +/// HARNESS_START_INDEX(0x0001, buffer, &size); |
2025 | 2031 | /// ``` |
2026 | 2032 | #define HARNESS_START_INDEX(start_index, buffer, size_ptr) \ |
2027 | 2033 | do { \ |
|
2097 | 2103 | /// |
2098 | 2104 | /// ``` |
2099 | 2105 | /// unsigned char buffer[1024]; |
2100 | | -/// HARNESS_START_WITH_MAXIMUM_SIZE_INDEX(0x0001U, buffer, 1024); |
| 2106 | +/// HARNESS_START_WITH_MAXIMUM_SIZE_INDEX(0x0001, buffer, 1024); |
2101 | 2107 | /// ``` |
2102 | 2108 | #define HARNESS_START_WITH_MAXIMUM_SIZE_INDEX(start_index, buffer, max_size) \ |
2103 | 2109 | do { \ |
|
2231 | 2237 | /// # Example |
2232 | 2238 | /// |
2233 | 2239 | /// ``` |
2234 | | -/// HARNESS_STOP_INDEX(0x0001U); |
| 2240 | +/// HARNESS_STOP_INDEX(0x0001); |
2235 | 2241 | /// ``` |
2236 | 2242 | #define HARNESS_STOP_INDEX(stop_index) \ |
2237 | 2243 | do { \ |
|
2280 | 2286 | /// # Example |
2281 | 2287 | /// |
2282 | 2288 | /// ``` |
2283 | | -/// HARNESS_ASSERT_INDEX(0x0001U); |
| 2289 | +/// HARNESS_ASSERT_INDEX(0x0001); |
2284 | 2290 | /// ``` |
2285 | 2291 | #define HARNESS_ASSERT_INDEX(assert_index) \ |
2286 | 2292 | do { \ |
|
2334 | 2340 | "mov r10, %0; orr r" __tostring(value) ", r" __tostring( \ |
2335 | 2341 | value) ", r" __tostring(value) \ |
2336 | 2342 | : \ |
2337 | | - : "r"(arg0)); |
| 2343 | + : "r"(arg0) \ |
| 2344 | + : "r10"); |
2338 | 2345 |
|
2339 | 2346 | /// __orr_extended2 |
2340 | 2347 | /// |
|
2352 | 2359 | "mov r10, %0; mov r9, %1; orr r" __tostring(value) ", r" __tostring( \ |
2353 | 2360 | value) ", r" __tostring(value) \ |
2354 | 2361 | : \ |
2355 | | - : "r"(arg0), "r"(arg1)); |
| 2362 | + : "r"(arg0), "r"(arg1) \ |
| 2363 | + : "r10", "r9"); |
2356 | 2364 |
|
2357 | 2365 | /// __orr_extended3 |
2358 | 2366 | /// |
|
2371 | 2379 | "mov r10, %0; mov r9, %1; mov r8, %2; orr r" __tostring( \ |
2372 | 2380 | value) ", r" __tostring(value) ", r" __tostring(value) \ |
2373 | 2381 | : \ |
2374 | | - : "r"(arg0), "r"(arg1), "r"(arg2)); |
| 2382 | + : "r"(arg0), "r"(arg1), "r"(arg2) \ |
| 2383 | + : "r10", "r9", "r8"); |
2375 | 2384 |
|
2376 | 2385 | /// __orr_extended4 |
2377 | 2386 | /// |
|
2392 | 2401 | "orr r" __tostring(value) ", r" __tostring(value) ", r" __tostring( \ |
2393 | 2402 | value) \ |
2394 | 2403 | : \ |
2395 | | - : "r"(arg0), "r"(arg1), "r"(arg2), "r"(arg3)); |
| 2404 | + : "r"(arg0), "r"(arg1), "r"(arg2), "r"(arg3) \ |
| 2405 | + : "r10", "r9", "r8", "r7"); |
2396 | 2406 |
|
2397 | 2407 | /// Magic value defined by SIMICS as the "leaf" value of a CPUID instruction |
2398 | 2408 | /// that is treated as a magic instruction. |
|
0 commit comments