[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avr-libc-commit] [2285] New file.
From: |
Dmitry Xmelkov |
Subject: |
[avr-libc-commit] [2285] New file. |
Date: |
Sun, 08 Jan 2012 13:09:36 +0000 |
Revision: 2285
http://svn.sv.gnu.org/viewvc/?view=rev&root=avr-libc&revision=2285
Author: dmix
Date: 2012-01-08 13:09:35 +0000 (Sun, 08 Jan 2012)
Log Message:
-----------
New file.
Modified Paths:
--------------
trunk/avr-libc/ChangeLog
Added Paths:
-----------
trunk/avr-libc/tests/simulate/other/progtype-1.c
trunk/avr-libc/tests/simulate/other/progtype-2.c
trunk/avr-libc/tests/simulate/other/progtype-3.c
Modified: trunk/avr-libc/ChangeLog
===================================================================
--- trunk/avr-libc/ChangeLog 2012-01-06 11:58:44 UTC (rev 2284)
+++ trunk/avr-libc/ChangeLog 2012-01-08 13:09:35 UTC (rev 2285)
@@ -1,3 +1,9 @@
+2012-01-08 Dmitry Xmelkov <address@hidden>
+
+ * tests/simulate/other/progtype-1.c: New file.
+ * tests/simulate/other/progtype-2.c: New file.
+ * tests/simulate/other/progtype-3.c: New file.
+
2012-01-06 Dmitry Xmelkov <address@hidden>
* include/avr/common.h: Fix typo of last commit.
Added: trunk/avr-libc/tests/simulate/other/progtype-1.c
===================================================================
--- trunk/avr-libc/tests/simulate/other/progtype-1.c
(rev 0)
+++ trunk/avr-libc/tests/simulate/other/progtype-1.c 2012-01-08 13:09:35 UTC
(rev 2285)
@@ -0,0 +1,210 @@
+/* Copyright (c) 2012 Dmitry Xmelkov
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of the copyright holders nor the names of
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Test of progmem types (this types are deprecated).
+ $Id$ */
+
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
+# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
+#ifndef __AVR__
+
+/* Omit the test. */
+int main () { return 0; }
+
+#else
+
+#define __PROG_TYPES_COMPAT__
+#include <avr/pgmspace.h>
+
+#define pgm_read_qword(addr) ({ \
+ union { \
+ unsigned long __dw[2]; \
+ unsigned long long __qw[1]; \
+ } __u; \
+ __u.__dw[0] = pgm_read_dword (addr); \
+ __u.__dw[1] = pgm_read_dword ((void *)addr + 4); \
+ __u.__qw[0]; \
+ })
+
+
+#define DCLEXT(prefix, array) \
+ const prog_char prefix##_char array; \
+ const prog_uchar prefix##_uchar array; \
+ const prog_int8_t prefix##_int8 array; \
+ const prog_uint8_t prefix##_uint8 array; \
+ const prog_int16_t prefix##_int16 array; \
+ const prog_uint16_t prefix##_uint16 array; \
+ const prog_int32_t prefix##_int32 array; \
+ const prog_uint32_t prefix##_uint32 array; \
+ const prog_int64_t prefix##_int64 array; \
+ const prog_uint64_t prefix##_uint64 array;
+
+
+#define DCLVAR_SET(prefix, class, ch,uch, i8,u8, i16,u16, i32,u32, i64,u64) \
+ class const prog_char prefix##_char = ch; \
+ class const prog_uchar prefix##_uchar = uch; \
+ class const prog_int8_t prefix##_int8 = i8; \
+ class const prog_uint8_t prefix##_uint8 = u8; \
+ class const prog_int16_t prefix##_int16 = i16; \
+ class const prog_uint16_t prefix##_uint16 = u16; \
+ class const prog_int32_t prefix##_int32 = i32; \
+ class const prog_uint32_t prefix##_uint32 = u32; \
+ class const prog_int64_t prefix##_int64 = i64; \
+ class const prog_uint64_t prefix##_uint64 = u64;
+
+#define DCLVAR(prefix, class, set) DCLVAR_SET (prefix, class, set)
+
+
+#define DCLARR_SET(prefix, n, class, ch,uch, i8,u8, i16,u16, i32,u32, i64,u64)\
+ class const prog_char prefix##_char[n] = { ch }; \
+ class const prog_uchar prefix##_uchar[n] = { uch }; \
+ class const prog_int8_t prefix##_int8[n] = { i8 }; \
+ class const prog_uint8_t prefix##_uint8[n] = { u8 }; \
+ class const prog_int16_t prefix##_int16[n] = { i16 }; \
+ class const prog_uint16_t prefix##_uint16[n] = { u16 }; \
+ class const prog_int32_t prefix##_int32[n] = { i32 }; \
+ class const prog_uint32_t prefix##_uint32[n] = { u32 }; \
+ class const prog_int64_t prefix##_int64[n] = { i64 }; \
+ class const prog_uint64_t prefix##_uint64[n] = { u64 };
+
+#define DCLARR(prefix, nelems, class, set) \
+ DCLARR_SET(prefix, nelems, class, set)
+
+
+#define CHKSIZE(prefix, nelems) \
+ (sizeof (prefix##_char) == (nelems) \
+ && sizeof (prefix##_uchar) == (nelems) \
+ && sizeof (prefix##_int8) == (nelems) \
+ && sizeof (prefix##_uint8) == (nelems) \
+ && sizeof (prefix##_int16) == 2 * (nelems) \
+ && sizeof (prefix##_uint16) == 2 * (nelems) \
+ && sizeof (prefix##_int32) == 4 * (nelems) \
+ && sizeof (prefix##_uint32) == 4 * (nelems) \
+ && sizeof (prefix##_int64) == 8 * (nelems) \
+ && sizeof (prefix##_uint64) == 8 * (nelems))
+
+
+/* With 64-bit values onle the little 4 bytes are checked. */
+#define CHKVAL_SET(prefix, ch, uch, i8, u8, i16, u16, i32, u32, i64, u64) \
+ (pgm_read_byte (& prefix##_char) == (ch) \
+ && pgm_read_byte (& prefix##_uchar) == (uch) \
+ && pgm_read_byte (& prefix##_int8) == (i8) \
+ && pgm_read_byte (& prefix##_uint8) == (u8) \
+ && pgm_read_word (& prefix##_int16) == (i16) \
+ && pgm_read_word (& prefix##_uint16) == (u16) \
+ && pgm_read_dword (& prefix##_int32) == (i32) \
+ && pgm_read_dword (& prefix##_uint32) == (u32) \
+ && pgm_read_qword (& prefix##_int64) == (i64) \
+ && pgm_read_qword (& prefix##_uint64) == (u64)) \
+
+#define CHKVAL(prefix, set) CHKVAL_SET (prefix, set)
+
+
+#define SET0 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+#define SET1 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
+#define SET2 2, 4, 6, 8, 10, 12, 14, 16, 18, 20
+#define SET3 3, 6, 9, 12, 15, 18, 21, 24, 27, 30
+#define SET4 4, 8, 12, 16, 20, 24, 28, 32, 36, 40
+#define SET5 5, 10, 15, 20, 25, 30, 35, 40, 45, 50
+#define SET6 6, 12, 18, 24, 30, 36, 42, 48, 54, 60
+#define SET7 7, 14, 21, 28, 35, 42, 49, 56, 63, 70
+#define SET8 8, 16, 24, 32, 40, 48, 56, 64, 72, 80
+
+
+/* File visible progmem variables and arrays. */
+
+DCLVAR (x0,, SET0) /* const prog_char x0_char = 0; ... */
+DCLVAR (x1,, SET1) /* const prog_char x1_char = 1; ... */
+DCLVAR (x2, static, SET2) /* static const prog_char x2_char = 2; ... */
+DCLARR (x3, 1,, SET3) /* const prog_char x3_char[1] = {3}; ... */
+DCLARR (x4, 2, static, SET4) /* static const prog_char x4_char[2] = {4}; */
+
+DCLEXT (x5,) /* extern const prog_char x5_char; ... */
+DCLVAR (x5,, SET5) /* const prog_char x5_char = 5; ... */
+
+DCLEXT (x6, [3]) /* extern const prog_char x6_char[3]; ... */
+DCLARR (x6, 3,, SET6) /* const prog_char x6_char[3] = { 6 }; ... */
+
+int main ()
+{
+ /* Function visible progmem variables and arrays. */
+ DCLVAR (x7, static, SET7)
+ DCLARR (x8, 4, static, SET8)
+
+ if (!CHKSIZE (x0, 1))
+ return __LINE__;
+ if (!CHKVAL (x0, SET0))
+ return __LINE__;
+
+ if (!CHKSIZE (x1, 1))
+ return __LINE__;
+ if (!CHKVAL (x1, SET1))
+ return __LINE__;
+
+ if (!CHKSIZE (x2, 1))
+ return __LINE__;
+ if (!CHKVAL (x2, SET2))
+ return __LINE__;
+
+ if (!CHKSIZE (x3, 1))
+ return __LINE__;
+ if (!CHKVAL (x3, SET3))
+ return __LINE__;
+
+ if (!CHKSIZE (x4, 2))
+ return __LINE__;
+ if (!CHKVAL (x4, SET4))
+ return __LINE__;
+
+ if (!CHKSIZE (x5, 1))
+ return __LINE__;
+ if (!CHKVAL (x5, SET5))
+ return __LINE__;
+
+ if (!CHKSIZE (x6, 3))
+ return __LINE__;
+ if (!CHKVAL (x6, SET6))
+ return __LINE__;
+
+ if (!CHKSIZE (x7, 1))
+ return __LINE__;
+ if (!CHKVAL (x7, SET7))
+ return __LINE__;
+
+ if (!CHKSIZE (x8, 4))
+ return __LINE__;
+ if (!CHKVAL (x8, SET8))
+ return __LINE__;
+
+ return 0;
+}
+
+#endif /* __AVR__ */
Added: trunk/avr-libc/tests/simulate/other/progtype-2.c
===================================================================
--- trunk/avr-libc/tests/simulate/other/progtype-2.c
(rev 0)
+++ trunk/avr-libc/tests/simulate/other/progtype-2.c 2012-01-08 13:09:35 UTC
(rev 2285)
@@ -0,0 +1,69 @@
+/* Copyright (c) 2012 Dmitry Xmelkov
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of the copyright holders nor the names of
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Test of progmem types (this types are deprecated): a tail of arrays.
+ $Id$ */
+
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
+# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
+#ifndef __AVR__
+
+/* Omit the test. */
+int main () { return 0; }
+
+#else
+
+#define __PROG_TYPES_COMPAT__
+#include <avr/pgmspace.h>
+
+const prog_char s[] = "The quick";
+static const prog_int16_t x[3] = { -2, 1000, 32765 };
+
+int main ()
+{
+ if (sizeof (s) != 10)
+ return __LINE__;
+ if (strcmp_P ("The quick", s))
+ return __LINE__;
+
+ if (sizeof (x) != 6)
+ return __LINE__;
+ if ((int)pgm_read_word (x) != -2
+ || pgm_read_word (x + 1) != 1000
+ || pgm_read_word (x + 2) != 32765)
+ {
+ return __LINE__;
+ }
+
+ return 0;
+}
+
+#endif /* __AVR__ */
Added: trunk/avr-libc/tests/simulate/other/progtype-3.c
===================================================================
--- trunk/avr-libc/tests/simulate/other/progtype-3.c
(rev 0)
+++ trunk/avr-libc/tests/simulate/other/progtype-3.c 2012-01-08 13:09:35 UTC
(rev 2285)
@@ -0,0 +1,63 @@
+/* Copyright (c) 2012 Dmitry Xmelkov
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of the copyright holders nor the names of
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* Test of progmem types (this types are deprecated): array without init.
+ $Id$ */
+
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
+# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
+#ifndef __AVR__
+
+/* Omit the test. */
+int main () { return 0; }
+
+#else
+
+#define __PROG_TYPES_COMPAT__
+#include <avr/pgmspace.h>
+
+static const prog_char s[10];
+
+int main ()
+{
+ size_t i;
+
+ if (sizeof (s) != 10)
+ return __LINE__;
+ for (i = 0; i < sizeof (s); i++) {
+ if (pgm_read_byte (s + i))
+ return __LINE__;
+ }
+
+ return 0;
+}
+
+#endif /* __AVR__ */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [avr-libc-commit] [2285] New file.,
Dmitry Xmelkov <=