<html lang="en">
<head>
<title>Other 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="FR_002dV-Built_002din-Functions.html#FR_002dV-Built_002din-Functions" title="FR-V Built-in Functions">
<link rel="prev" href="Raw-read_002fwrite-Functions.html#Raw-read_002fwrite-Functions" title="Raw read/write 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="Other-Built-in-Functions"></a>
<a name="Other-Built_002din-Functions"></a>
<p>
Previous:&nbsp;<a rel="previous" accesskey="p" href="Raw-read_002fwrite-Functions.html#Raw-read_002fwrite-Functions">Raw read/write Functions</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="FR_002dV-Built_002din-Functions.html#FR_002dV-Built_002din-Functions">FR-V Built-in Functions</a>
<hr>
</div>

<h5 class="subsubsection">6.52.5.5 Other Built-in Functions</h5>

<p>This section describes built-in functions that are not named after
a specific FR-V instruction.

     <dl>
<dt><code>sw2 __IACCreadll (iacc </code><var>reg</var><code>)</code><dd>Return the full 64-bit value of IACC0.  The <var>reg</var> argument is reserved
for future expansion and must be 0.

     <br><dt><code>sw1 __IACCreadl (iacc </code><var>reg</var><code>)</code><dd>Return the value of IACC0H if <var>reg</var> is 0 and IACC0L if <var>reg</var> is 1. 
Other values of <var>reg</var> are rejected as invalid.

     <br><dt><code>void __IACCsetll (iacc </code><var>reg</var><code>, sw2 </code><var>x</var><code>)</code><dd>Set the full 64-bit value of IACC0 to <var>x</var>.  The <var>reg</var> argument
is reserved for future expansion and must be 0.

     <br><dt><code>void __IACCsetl (iacc </code><var>reg</var><code>, sw1 </code><var>x</var><code>)</code><dd>Set IACC0H to <var>x</var> if <var>reg</var> is 0 and IACC0L to <var>x</var> if <var>reg</var>
is 1.  Other values of <var>reg</var> are rejected as invalid.

     <br><dt><code>void __data_prefetch0 (const void *</code><var>x</var><code>)</code><dd>Use the <code>dcpl</code> instruction to load the contents of address <var>x</var>
into the data cache.

     <br><dt><code>void __data_prefetch (const void *</code><var>x</var><code>)</code><dd>Use the <code>nldub</code> instruction to load the contents of address <var>x</var>
into the data cache.  The instruction will be issued in slot I1. 
</dl>

 </body></html>

