Home | History | Annotate | Line # | Download | only in gdb.arch
      1   1.1  christos /* Register test program.
      2   1.1  christos 
      3  1.11  christos    Copyright 2007-2024 Free Software Foundation, Inc.
      4   1.1  christos 
      5   1.1  christos    This file is part of GDB.
      6   1.1  christos 
      7   1.1  christos    This program is free software; you can redistribute it and/or modify
      8   1.1  christos    it under the terms of the GNU General Public License as published by
      9   1.1  christos    the Free Software Foundation; either version 3 of the License, or
     10   1.1  christos    (at your option) any later version.
     11   1.1  christos 
     12   1.1  christos    This program is distributed in the hope that it will be useful,
     13   1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14   1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15   1.1  christos    GNU General Public License for more details.
     16   1.1  christos 
     17   1.1  christos    You should have received a copy of the GNU General Public License
     18   1.1  christos    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19   1.1  christos 
     20   1.1  christos void
     21   1.1  christos read_regs (unsigned long long regs[16], unsigned long control_regs[6])
     22   1.1  christos {
     23   1.1  christos   asm volatile ("wstrd wR0, %0" : "=m" (regs[0]));
     24   1.1  christos   asm volatile ("wstrd wR1, %0" : "=m" (regs[1]));
     25   1.1  christos   asm volatile ("wstrd wR2, %0" : "=m" (regs[2]));
     26   1.1  christos   asm volatile ("wstrd wR3, %0" : "=m" (regs[3]));
     27   1.1  christos   asm volatile ("wstrd wR4, %0" : "=m" (regs[4]));
     28   1.1  christos   asm volatile ("wstrd wR5, %0" : "=m" (regs[5]));
     29   1.1  christos   asm volatile ("wstrd wR6, %0" : "=m" (regs[6]));
     30   1.1  christos   asm volatile ("wstrd wR7, %0" : "=m" (regs[7]));
     31   1.1  christos   asm volatile ("wstrd wR8, %0" : "=m" (regs[8]));
     32   1.1  christos   asm volatile ("wstrd wR9, %0" : "=m" (regs[9]));
     33   1.1  christos   asm volatile ("wstrd wR10, %0" : "=m" (regs[10]));
     34   1.1  christos   asm volatile ("wstrd wR11, %0" : "=m" (regs[11]));
     35   1.1  christos   asm volatile ("wstrd wR12, %0" : "=m" (regs[12]));
     36   1.1  christos   asm volatile ("wstrd wR13, %0" : "=m" (regs[13]));
     37   1.1  christos   asm volatile ("wstrd wR14, %0" : "=m" (regs[14]));
     38   1.1  christos   asm volatile ("wstrd wR15, %0" : "=m" (regs[15]));
     39   1.1  christos 
     40   1.1  christos   asm volatile ("wstrw wCSSF, %0" : "=m" (control_regs[0]));
     41   1.1  christos   asm volatile ("wstrw wCASF, %0" : "=m" (control_regs[1]));
     42   1.1  christos   asm volatile ("wstrw wCGR0, %0" : "=m" (control_regs[2]));
     43   1.1  christos   asm volatile ("wstrw wCGR1, %0" : "=m" (control_regs[3]));
     44   1.1  christos   asm volatile ("wstrw wCGR2, %0" : "=m" (control_regs[4]));
     45   1.1  christos   asm volatile ("wstrw wCGR3, %0" : "=m" (control_regs[5]));
     46   1.1  christos }
     47   1.1  christos 
     48   1.1  christos void
     49   1.1  christos write_regs (unsigned long long regs[16], unsigned long control_regs[6])
     50   1.1  christos {
     51   1.1  christos   asm volatile ("wldrd wR0, %0" : : "m" (regs[0]));
     52   1.1  christos   asm volatile ("wldrd wR1, %0" : : "m" (regs[1]));
     53   1.1  christos   asm volatile ("wldrd wR2, %0" : : "m" (regs[2]));
     54   1.1  christos   asm volatile ("wldrd wR3, %0" : : "m" (regs[3]));
     55   1.1  christos   asm volatile ("wldrd wR4, %0" : : "m" (regs[4]));
     56   1.1  christos   asm volatile ("wldrd wR5, %0" : : "m" (regs[5]));
     57   1.1  christos   asm volatile ("wldrd wR6, %0" : : "m" (regs[6]));
     58   1.1  christos   asm volatile ("wldrd wR7, %0" : : "m" (regs[7]));
     59   1.1  christos   asm volatile ("wldrd wR8, %0" : : "m" (regs[8]));
     60   1.1  christos   asm volatile ("wldrd wR9, %0" : : "m" (regs[9]));
     61   1.1  christos   asm volatile ("wldrd wR10, %0" : : "m" (regs[10]));
     62   1.1  christos   asm volatile ("wldrd wR11, %0" : : "m" (regs[11]));
     63   1.1  christos   asm volatile ("wldrd wR12, %0" : : "m" (regs[12]));
     64   1.1  christos   asm volatile ("wldrd wR13, %0" : : "m" (regs[13]));
     65   1.1  christos   asm volatile ("wldrd wR14, %0" : : "m" (regs[14]));
     66   1.1  christos   asm volatile ("wldrd wR15, %0" : : "m" (regs[15]));
     67   1.1  christos 
     68   1.1  christos   asm volatile ("wldrw wCSSF, %0" : : "m" (control_regs[0]));
     69   1.1  christos   asm volatile ("wldrw wCASF, %0" : : "m" (control_regs[1]));
     70   1.1  christos   asm volatile ("wldrw wCGR0, %0" : : "m" (control_regs[2]));
     71   1.1  christos   asm volatile ("wldrw wCGR1, %0" : : "m" (control_regs[3]));
     72   1.1  christos   asm volatile ("wldrw wCGR2, %0" : : "m" (control_regs[4]));
     73   1.1  christos   asm volatile ("wldrw wCGR3, %0" : : "m" (control_regs[5]));
     74   1.1  christos }
     75   1.1  christos 
     76   1.1  christos int
     77   1.1  christos main ()
     78   1.1  christos {
     79   1.1  christos   unsigned long long regs[16];
     80   1.1  christos   unsigned long control_regs[6];
     81   1.1  christos 
     82   1.1  christos   read_regs (regs, control_regs);
     83   1.1  christos   write_regs (regs, control_regs);
     84   1.1  christos 
     85   1.1  christos   return 0;
     86   1.1  christos }
     87