<html lang="en">
<head>
<title>picoChip Built-in Functions - Using the GNU Compiler Collection (GCC)</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Using the GNU Compiler Collection (GCC)">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Target-Builtins.html#Target-Builtins" title="Target Builtins">
<link rel="prev" href="Other-MIPS-Built_002din-Functions.html#Other-MIPS-Built_002din-Functions" title="Other MIPS Built-in Functions">
<link rel="next" href="PowerPC-AltiVec_002fVSX-Built_002din-Functions.html#PowerPC-AltiVec_002fVSX-Built_002din-Functions" title="PowerPC AltiVec/VSX Built-in Functions">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
2008 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Funding Free Software'', the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below).  A copy of the license is included in the section entitled
``GNU Free Documentation License''.

(a) The FSF's Front-Cover Text is:

     A GNU Manual

(b) The FSF's Back-Cover Text is:

     You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development.-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
  pre.display { font-family:inherit }
  pre.format  { font-family:inherit }
  pre.smalldisplay { font-family:inherit; font-size:smaller }
  pre.smallformat  { font-family:inherit; font-size:smaller }
  pre.smallexample { font-size:smaller }
  pre.smalllisp    { font-size:smaller }
  span.sc    { font-variant:small-caps }
  span.roman { font-family:serif; font-weight:normal; } 
  span.sansserif { font-family:sans-serif; font-weight:normal; } 
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="picoChip-Built-in-Functions"></a>
<a name="picoChip-Built_002din-Functions"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="PowerPC-AltiVec_002fVSX-Built_002din-Functions.html#PowerPC-AltiVec_002fVSX-Built_002din-Functions">PowerPC AltiVec/VSX Built-in Functions</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Other-MIPS-Built_002din-Functions.html#Other-MIPS-Built_002din-Functions">Other MIPS Built-in Functions</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Target-Builtins.html#Target-Builtins">Target Builtins</a>
<hr>
</div>

<h4 class="subsection">6.52.10 picoChip Built-in Functions</h4>

<p>GCC provides an interface to selected machine instructions from the
picoChip instruction set.

     <dl>
<dt><code>int __builtin_sbc (int </code><var>value</var><code>)</code><dd>Sign bit count.  Return the number of consecutive bits in <var>value</var>
which have the same value as the sign-bit.  The result is the number of
leading sign bits minus one, giving the number of redundant sign bits in
<var>value</var>.

     <br><dt><code>int __builtin_byteswap (int </code><var>value</var><code>)</code><dd>Byte swap.  Return the result of swapping the upper and lower bytes of
<var>value</var>.

     <br><dt><code>int __builtin_brev (int </code><var>value</var><code>)</code><dd>Bit reversal.  Return the result of reversing the bits in
<var>value</var>.  Bit 15 is swapped with bit 0, bit 14 is swapped with bit 1,
and so on.

     <br><dt><code>int __builtin_adds (int </code><var>x</var><code>, int </code><var>y</var><code>)</code><dd>Saturating addition.  Return the result of adding <var>x</var> and <var>y</var>,
storing the value 32767 if the result overflows.

     <br><dt><code>int __builtin_subs (int </code><var>x</var><code>, int </code><var>y</var><code>)</code><dd>Saturating subtraction.  Return the result of subtracting <var>y</var> from
<var>x</var>, storing the value &minus;32768 if the result overflows.

     <br><dt><code>void __builtin_halt (void)</code><dd>Halt.  The processor will stop execution.  This built-in is useful for
implementing assertions.

 </dl>

 </body></html>

