| /* This test program is part of GDB, the GNU debugger. |
| |
| Copyright 2024-2025 Free Software Foundation, Inc. |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 3 of the License, or |
| (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
| |
| int |
| main (void) |
| { |
| char source[40] __attribute__ ((aligned (8))) |
| = "This is a relatively long string..."; |
| char a[40] __attribute__ ((aligned (8))) |
| = "String to be overwritten with zeroes"; |
| char b[40] __attribute__ ((aligned (8))) |
| = "Another string to be memcopied..."; |
| char c[40] __attribute__ ((aligned (8))) |
| = "Another string to be memmoved..."; |
| char *p, *q; |
| long size, zero; |
| |
| /* Break here. */ |
| p = a; |
| size = sizeof (a); |
| zero = 0; |
| /* memset implemented in MOPS instructions. */ |
| __asm__ volatile ("setp [%0]!, %1!, %2\n\t" |
| "setm [%0]!, %1!, %2\n\t" |
| "sete [%0]!, %1!, %2\n\t" |
| : "+&r"(p), "+&r"(size) |
| : "r"(zero) |
| : "memory"); |
| |
| p = b; |
| q = source; |
| size = sizeof (b); |
| /* memmove implemented in MOPS instructions. */ |
| __asm__ volatile ("cpyp [%0]!, [%1]!, %2!\n\t" |
| "cpym [%0]!, [%1]!, %2!\n\t" |
| "cpye [%0]!, [%1]!, %2!\n\t" |
| : "+&r" (p), "+&r" (q), "+&r" (size) |
| : |
| : "memory"); |
| p = c; |
| q = source; |
| size = sizeof (c); |
| /* memcpy implemented in MOPS instructions. */ |
| __asm__ volatile ("cpyfp [%0]!, [%1]!, %2!\n\t" |
| "cpyfm [%0]!, [%1]!, %2!\n\t" |
| "cpyfe [%0]!, [%1]!, %2!\n\t" |
| : "+&r" (p), "+&r" (q), "+&r" (size) |
| : |
| : "memory"); |
| |
| return 0; |
| } |