PowerPC: Extend Program Priority Register support

This patch adds extra inline functions to change the Program Priority
Register from ISA 2.07.

2015-08-19  Gabriel F. T. Gomes  <gftg@linux.vnet.ibm.com>

	* sysdeps/powerpc/sys/platform/ppc.h (__ppc_set_ppr_med_high,
	__ppc_set_ppr_very_low): New functions.
	* manual/platform.texi: Add documentation about
	__ppc_set_ppr_med_high and __ppc_set_ppr_very_low.
This commit is contained in:
Gabriel F. T. Gomes 2015-08-10 10:58:12 -03:00 committed by Tulio Magno Quites Machado Filho
parent 1f3be1988b
commit 1747fcda49
3 changed files with 56 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2015-08-19 Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
* sysdeps/powerpc/sys/platform/ppc.h (__ppc_set_ppr_med_high,
__ppc_set_ppr_very_low): New functions.
* manual/platform.texi: Add documentation about
__ppc_set_ppr_med_high and __ppc_set_ppr_very_low.
2015-08-19 Wilco Dijkstra <wdijkstr@arm.com>
* string/stpncpy.c (stpncpy): Improve performance using

View File

@ -97,3 +97,21 @@ Set the Program Priority Register to low value.
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Set the Program Priority Register to medium low value.
@end deftypefun
Power ISA 2.07 extends the priorities that can be set to the Program Priority
Register (PPR). The following functions implement the new priority levels:
very low and medium high.
@deftypefun {void} __ppc_set_ppr_very_low (void)
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Set the Program Priority Register to very low value.
@end deftypefun
@deftypefun {void} __ppc_set_ppr_med_high (void)
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
Set the Program Priority Register to medium high value. The medium high
priority is privileged and may only be set during certain time intervals by
problem-state programs. If the program priority is medium high when the time
interval expires or if an attempt is made to set the priority to medium high
when it is not allowed, the priority is set to medium.
@end deftypefun

View File

@ -112,4 +112,35 @@ __ppc_set_ppr_low (void)
__asm__ volatile ("or 1,1,1");
}
/* Power ISA 2.07 (Book II, Chapter 3) extends the priorities that can be set
to the Program Priority Register (PPR). The form 'or Rx,Rx,Rx' is used to
modify the PRI field of the PPR, the same way as described above.
The new priority levels are:
Rx = 31 (very low)
Rx = 5 (medium high)
Any program can set the priority to very low, low, medium low, and medium,
as these are unprivileged.
The medium high priority, on the other hand, is privileged, and may only be
set during certain time intervals by problem-state programs. If the program
priority is medium high when the time interval expires or if an attempt is
made to set the priority to medium high when it is not allowed, the PRI
field is set to medium.
*/
#ifdef _ARCH_PWR8
static inline void
__ppc_set_ppr_very_low (void)
{
__asm__ volatile ("or 31,31,31");
}
static inline void
__ppc_set_ppr_med_high (void)
{
__asm__ volatile ("or 5,5,5");
}
#endif
#endif /* sys/platform/ppc.h */