]> git.llucax.com Git - software/druntime.git/blobdiff - import/std/intrinsic.di
Fixed a few build script issues on posix, including a bug in looking for some of...
[software/druntime.git] / import / std / intrinsic.di
index c5c8110221c949e531706901ac75466091cd3697..b82f07c03554a49d243d76a9474c41d050a75acf 100644 (file)
-/**\r
- * These functions are built-in intrinsics to the compiler.\r
- *\r
- * Intrinsic functions are functions built in to the compiler, usually to take\r
- * advantage of specific CPU features that are inefficient to handle via\r
- * external functions.  The compiler's optimizer and code generator are fully\r
- * integrated in with intrinsic functions, bringing to bear their full power on\r
- * them. This can result in some surprising speedups.\r
- *\r
- * Copyright: Public Domain\r
- * License:   Public Domain\r
- * Authors:   Walter Bright\r
- */\r
-module std.intrinsic;\r
-\r
-\r
-/**\r
- * Scans the bits in v starting with bit 0, looking\r
- * for the first set bit.\r
- * Returns:\r
- *      The bit number of the first bit set.\r
- *      The return value is undefined if v is zero.\r
- */\r
-int bsf( uint v );\r
-\r
-\r
-/**\r
- * Scans the bits in v from the most significant bit\r
- * to the least significant bit, looking\r
- * for the first set bit.\r
- * Returns:\r
- *      The bit number of the first bit set.\r
- *      The return value is undefined if v is zero.\r
- * Example:\r
- * ---\r
- * import std.intrinsic;\r
- *\r
- * int main()\r
- * {\r
- *     uint v;\r
- *     int x;\r
- *\r
- *     v = 0x21;\r
- *     x = bsf(v);\r
- *     printf("bsf(x%x) = %d\n", v, x);\r
- *     x = bsr(v);\r
- *     printf("bsr(x%x) = %d\n", v, x);\r
- *     return 0;\r
- * }\r
- * ---\r
- * Output:\r
- *  bsf(x21) = 0<br>\r
- *  bsr(x21) = 5\r
- */\r
-int bsr( uint v );\r
-\r
-\r
-/**\r
- * Tests the bit.\r
- */\r
-int bt( uint* p, uint bitnum );\r
-\r
-\r
-/**\r
- * Tests and complements the bit.\r
- */\r
-int btc( uint* p, uint bitnum );\r
-\r
-\r
-/**\r
- * Tests and resets (sets to 0) the bit.\r
- */\r
-int btr( uint* p, uint bitnum );\r
-\r
-\r
-/**\r
- * Tests and sets the bit.\r
- * Params:\r
- * p = a non-NULL pointer to an array of uints.\r
- * index = a bit number, starting with bit 0 of p[0],\r
- * and progressing. It addresses bits like the expression:\r
----\r
-p[index / (uint.sizeof*8)] & (1 << (index & ((uint.sizeof*8) - 1)))\r
----\r
- * Returns:\r
- *      A non-zero value if the bit was set, and a zero\r
- *      if it was clear.\r
- *\r
- * Example:\r
- * ---\r
-import std.intrinsic;\r
-\r
-int main()\r
-{\r
-    uint array[2];\r
-\r
-    array[0] = 2;\r
-    array[1] = 0x100;\r
-\r
-    printf("btc(array, 35) = %d\n", <b>btc</b>(array, 35));\r
-    printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);\r
-\r
-    printf("btc(array, 35) = %d\n", <b>btc</b>(array, 35));\r
-    printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);\r
-\r
-    printf("bts(array, 35) = %d\n", <b>bts</b>(array, 35));\r
-    printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);\r
-\r
-    printf("btr(array, 35) = %d\n", <b>btr</b>(array, 35));\r
-    printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);\r
-\r
-    printf("bt(array, 1) = %d\n", <b>bt</b>(array, 1));\r
-    printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);\r
-\r
-    return 0;\r
-}\r
- * ---\r
- * Output:\r
-<pre>\r
-btc(array, 35) = 0\r
-array = [0]:x2, [1]:x108\r
-btc(array, 35) = -1\r
-array = [0]:x2, [1]:x100\r
-bts(array, 35) = 0\r
-array = [0]:x2, [1]:x108\r
-btr(array, 35) = -1\r
-array = [0]:x2, [1]:x100\r
-bt(array, 1) = -1\r
-array = [0]:x2, [1]:x100\r
-</pre>\r
- */\r
-int bts( uint* p, uint bitnum );\r
-\r
-\r
-/**\r
- * Swaps bytes in a 4 byte uint end-to-end, i.e. byte 0 becomes\r
- * byte 3, byte 1 becomes byte 2, byte 2 becomes byte 1, byte 3\r
- * becomes byte 0.\r
- */\r
-uint bswap( uint v );\r
-\r
-\r
-/**\r
- * Reads I/O port at port_address.\r
- */\r
-ubyte inp( uint port_address );\r
-\r
-\r
-/**\r
- * ditto\r
- */\r
-ushort inpw( uint port_address );\r
-\r
-\r
-/**\r
- * ditto\r
- */\r
-uint inpl( uint port_address );\r
-\r
-\r
-/**\r
- * Writes and returns value to I/O port at port_address.\r
- */\r
-ubyte outp( uint port_address, ubyte value );\r
-\r
-\r
-/**\r
- * ditto\r
- */\r
-ushort outpw( uint port_address, ushort value );\r
-\r
-\r
-/**\r
- * ditto\r
- */\r
-uint outpl( uint port_address, uint value );\r
+/**
+ * These functions are built-in intrinsics to the compiler.
+ *
+ * Intrinsic functions are functions built in to the compiler, usually to take
+ * advantage of specific CPU features that are inefficient to handle via
+ * external functions.  The compiler's optimizer and code generator are fully
+ * integrated in with intrinsic functions, bringing to bear their full power on
+ * them. This can result in some surprising speedups.
+ *
+ * Copyright: Public Domain
+ * License:   Public Domain
+ * Authors:   Walter Bright
+ */
+module std.intrinsic;
+
+
+/**
+ * Scans the bits in v starting with bit 0, looking
+ * for the first set bit.
+ * Returns:
+ *      The bit number of the first bit set.
+ *      The return value is undefined if v is zero.
+ */
+int bsf( uint v );
+
+
+/**
+ * Scans the bits in v from the most significant bit
+ * to the least significant bit, looking
+ * for the first set bit.
+ * Returns:
+ *      The bit number of the first bit set.
+ *      The return value is undefined if v is zero.
+ * Example:
+ * ---
+ * import std.intrinsic;
+ *
+ * int main()
+ * {
+ *     uint v;
+ *     int x;
+ *
+ *     v = 0x21;
+ *     x = bsf(v);
+ *     printf("bsf(x%x) = %d\n", v, x);
+ *     x = bsr(v);
+ *     printf("bsr(x%x) = %d\n", v, x);
+ *     return 0;
+ * }
+ * ---
+ * Output:
+ *  bsf(x21) = 0<br>
+ *  bsr(x21) = 5
+ */
+int bsr( uint v );
+
+
+/**
+ * Tests the bit.
+ */
+int bt( const uint* p, uint bitnum );
+
+
+/**
+ * Tests and complements the bit.
+ */
+int btc( uint* p, uint bitnum );
+
+
+/**
+ * Tests and resets (sets to 0) the bit.
+ */
+int btr( uint* p, uint bitnum );
+
+
+/**
+ * Tests and sets the bit.
+ * Params:
+ * p = a non-NULL pointer to an array of uints.
+ * index = a bit number, starting with bit 0 of p[0],
+ * and progressing. It addresses bits like the expression:
+---
+p[index / (uint.sizeof*8)] & (1 << (index & ((uint.sizeof*8) - 1)))
+---
+ * Returns:
+ *      A non-zero value if the bit was set, and a zero
+ *      if it was clear.
+ *
+ * Example:
+ * ---
+import std.intrinsic;
+
+int main()
+{
+    uint array[2];
+
+    array[0] = 2;
+    array[1] = 0x100;
+
+    printf("btc(array, 35) = %d\n", <b>btc</b>(array, 35));
+    printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);
+
+    printf("btc(array, 35) = %d\n", <b>btc</b>(array, 35));
+    printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);
+
+    printf("bts(array, 35) = %d\n", <b>bts</b>(array, 35));
+    printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);
+
+    printf("btr(array, 35) = %d\n", <b>btr</b>(array, 35));
+    printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);
+
+    printf("bt(array, 1) = %d\n", <b>bt</b>(array, 1));
+    printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]);
+
+    return 0;
+}
+ * ---
+ * Output:
+<pre>
+btc(array, 35) = 0
+array = [0]:x2, [1]:x108
+btc(array, 35) = -1
+array = [0]:x2, [1]:x100
+bts(array, 35) = 0
+array = [0]:x2, [1]:x108
+btr(array, 35) = -1
+array = [0]:x2, [1]:x100
+bt(array, 1) = -1
+array = [0]:x2, [1]:x100
+</pre>
+ */
+int bts( uint* p, uint bitnum );
+
+
+/**
+ * Swaps bytes in a 4 byte uint end-to-end, i.e. byte 0 becomes
+ * byte 3, byte 1 becomes byte 2, byte 2 becomes byte 1, byte 3
+ * becomes byte 0.
+ */
+uint bswap( uint v );
+
+
+/**
+ * Reads I/O port at port_address.
+ */
+ubyte inp( uint port_address );
+
+
+/**
+ * ditto
+ */
+ushort inpw( uint port_address );
+
+
+/**
+ * ditto
+ */
+uint inpl( uint port_address );
+
+
+/**
+ * Writes and returns value to I/O port at port_address.
+ */
+ubyte outp( uint port_address, ubyte value );
+
+
+/**
+ * ditto
+ */
+ushort outpw( uint port_address, ushort value );
+
+
+/**
+ * ditto
+ */
+uint outpl( uint port_address, uint value );