From: Georg-Johann Lay Date: Wed, 21 Dec 2016 09:20:12 +0000 (+0000) Subject: mmcu: New folder for compile-tests with -mmcu=. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=84ab8b8ad51a339d05a65759a4f603b01f0aa80a;p=gcc.git mmcu: New folder for compile-tests with -mmcu=. * gcc.target/avr/mmcu: New folder for compile-tests with -mmcu=. * gcc.target/avr/mmcu/avr-mmcu.exp: New file. * gcc.target/avr/pr58545.c: Move to gcc.target/avr/mmcu. * gcc.target/avr/tiny-caller-save.c: Dito. * gcc.target/avr/tiny-memx.c: Dito. From-SVN: r243840 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index be5673d69ea..4f5b6ae4702 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,4 +1,12 @@ -2016-12-22 Naveen H.S +2016-12-21 Georg-Johann Lay + + * gcc.target/avr/mmcu: New folder for compile-tests with -mmcu=. + * gcc.target/avr/mmcu/avr-mmcu.exp: New file. + * gcc.target/avr/pr58545.c: Move to gcc.target/avr/mmcu. + * gcc.target/avr/tiny-caller-save.c: Dito. + * gcc.target/avr/tiny-memx.c: Dito. + +2016-12-21 Naveen H.S * gcc.dg/max.c: New Testcase. * gcc.dg/min.c: New Testcase. diff --git a/gcc/testsuite/gcc.target/avr/mmcu/avr-mmcu.exp b/gcc/testsuite/gcc.target/avr/mmcu/avr-mmcu.exp new file mode 100644 index 00000000000..b1e3a9c5048 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/mmcu/avr-mmcu.exp @@ -0,0 +1,101 @@ +# Copyright (C) 2008-2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . + +# GCC testsuite that uses the `dg.exp' driver. + +# This folder contains compile tests that set dg-options to +# some -mmcu= which might collide with the MCU set by the +# target board. This in turn will fail the test case due to +# "error: specified option '-mmcu' more than once". +# +# Hence we filter out -mmcu= from cflags and --tool_opts before +# running the tests in this folder. + +# Exit immediately if this isn't an AVR target. +if ![istarget avr-*-*] then { + return +} + +# Return the saved values of the variable_list +proc save_variables { variable_list } { + set saved_variable { } + + foreach variable $variable_list { + upvar 1 $variable var + + set save($variable) $var + lappend saved_variable $save($variable) + } + return $saved_variable +} + +# Restore the values of the variable_list +proc restore_variables { variable_list saved_variable } { + foreach variable $variable_list value $saved_variable { + upvar 1 $variable var + set var $value + } +} + +# Filter out -mmcu= options +proc filter_out_mmcu { options } { + set reduced {} + + foreach option [ split $options ] { + if { ![ regexp "\-mmcu=.*" $option ] } { + lappend reduced $option + } + } + + return [ join $reduced " " ] +} + +# Load support procs. +load_lib gcc-dg.exp + +# If a testcase doesn't have special options, use these. +global DEFAULT_CFLAGS +if ![info exists DEFAULT_CFLAGS] then { + set DEFAULT_CFLAGS " -ansi -pedantic-errors" +} + +# If no --tool_opts were specified, use empty ones. +if ![info exists TOOL_OPTIONS] then { + set TOOL_OPTIONS "" +} + +# Initialize `dg'. +dg-init + +# Save +set variablelist [ list TOOL_OPTIONS board_info([target_info name],cflags) ] +set saved_value [ save_variables $variablelist ] + +# Filter-out -mmcu= +set TOOL_OPTIONS [ filter_out_mmcu $TOOL_OPTIONS ] +set board_info([ target_info name ],cflags) [ filter_out_mmcu $board_info([ target_info name ],cflags) ] + +# Main loop. +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.{\[cCS\],cpp}]] \ + "" $DEFAULT_CFLAGS + +# Restore +restore_variables $variablelist $saved_value + +set dg_runtest_extra_prunes "" + +# All done. +dg-finish diff --git a/gcc/testsuite/gcc.target/avr/mmcu/pr58545.c b/gcc/testsuite/gcc.target/avr/mmcu/pr58545.c new file mode 100644 index 00000000000..d1b8461f7cf --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/mmcu/pr58545.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-Os -mmcu=atmega8" } */ + +typedef unsigned char uint8_t; +typedef unsigned int uint16_t; + +extern uint8_t f1 (const uint8_t*); +extern void f2 (uint8_t*, uint8_t); + +void func (uint16_t parameter, uint8_t *addr, uint8_t data) +{ + uint8_t status; + + status = f1 (addr + 8); + + addr++; + + if (*addr == parameter + 8) + *addr = parameter; + + f2 (addr, data); + f2 (addr + 8, status + 1); +} diff --git a/gcc/testsuite/gcc.target/avr/mmcu/tiny-caller-save.c b/gcc/testsuite/gcc.target/avr/mmcu/tiny-caller-save.c new file mode 100644 index 00000000000..63fad3a1205 --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/mmcu/tiny-caller-save.c @@ -0,0 +1,78 @@ +/* { dg-do compile } */ +/* { dg-options "-mmcu=avrtiny -gdwarf -Os" } */ + +/* This is a stripped down piece of libgcc2.c that triggerd an ICE for avr with + "-mmcu=avrtiny -g -Os"; replace_reg_with_saved_mem would generate: + (concatn:SI [ + (reg:SI 18 r18) + (reg:SI 19 r19) + (mem/c:QI (plus:HI (reg/f:HI 28 r28) + (const_int 43 [0x2b])) [6 S1 A8]) + (mem/c:QI (plus:HI (reg/f:HI 28 r28) + (const_int 44 [0x2c])) [6 S1 A8]) + ]) */ + +typedef int SItype __attribute__ ((mode (SI))); +typedef unsigned int USItype __attribute__ ((mode (SI))); +typedef int DItype __attribute__ ((mode (DI))); +typedef unsigned int UDItype __attribute__ ((mode (DI))); +struct DWstruct +{ + SItype low, high; +}; +typedef union +{ + struct DWstruct s; + DItype ll; +} DWunion; + +UDItype +__udivmoddi4 (UDItype n, UDItype d) +{ + const DWunion nn = {.ll = n }; + const DWunion dd = {.ll = d }; + USItype d0, d1, n2; + USItype q0; + + d0 = dd.s.low; + d1 = dd.s.high; + n2 = nn.s.high; + + USItype m0; + + do + { + USItype __d1, __d0, __q1, __q0; + USItype __r1, __m; + __d1 = ((USItype) (d1) >> 16); + __d0 = ((USItype) (d1) & (((USItype) 1 << 16) - 1)); + __r1 = (n2) % __d1; + __q1 = (n2) / __d1; + __m = (USItype) __q1 *__d0; + __r1 -= __m; + __q0 = __r1 / __d1; + (q0) = (USItype) __q1 *((USItype) 1 << 16) | __q0; + } + while (0); + do + { + USItype __x0, __x1, __x2; + USItype __ul, __vl, __uh, __vh; + __ul = ((USItype) (q0) & (((USItype) 1 << 16) - 1)); + __uh = ((USItype) (q0) >> 16); + __vl = ((USItype) (d0) & (((USItype) 1 << 16) - 1)); + __vh = ((USItype) (d0) >> 16); + __x0 = (USItype) __ul *__vl; + __x1 = (USItype) __ul *__vh; + __x2 = (USItype) __uh *__vl; + __x1 += ((USItype) (__x0) >> 16); + __x1 += __x2; + (m0) = + ((USItype) (__x1) & (((USItype) 1 << 16) - 1)) * + ((USItype) 1 << 16) + + ((USItype) (__x0) & (((USItype) 1 << 16) - 1)); + } + while (0); + +return m0; +} diff --git a/gcc/testsuite/gcc.target/avr/mmcu/tiny-memx.c b/gcc/testsuite/gcc.target/avr/mmcu/tiny-memx.c new file mode 100644 index 00000000000..cdda86b14bf --- /dev/null +++ b/gcc/testsuite/gcc.target/avr/mmcu/tiny-memx.c @@ -0,0 +1,4 @@ +/* { dg-do compile } */ +/* { dg-options "-mmcu=avrtiny" } */ + +const __memx char ascmonth[] = "Jan"; /* { dg-error "not supported" } */ diff --git a/gcc/testsuite/gcc.target/avr/pr58545.c b/gcc/testsuite/gcc.target/avr/pr58545.c deleted file mode 100644 index d1b8461f7cf..00000000000 --- a/gcc/testsuite/gcc.target/avr/pr58545.c +++ /dev/null @@ -1,23 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "-Os -mmcu=atmega8" } */ - -typedef unsigned char uint8_t; -typedef unsigned int uint16_t; - -extern uint8_t f1 (const uint8_t*); -extern void f2 (uint8_t*, uint8_t); - -void func (uint16_t parameter, uint8_t *addr, uint8_t data) -{ - uint8_t status; - - status = f1 (addr + 8); - - addr++; - - if (*addr == parameter + 8) - *addr = parameter; - - f2 (addr, data); - f2 (addr + 8, status + 1); -} diff --git a/gcc/testsuite/gcc.target/avr/tiny-caller-save.c b/gcc/testsuite/gcc.target/avr/tiny-caller-save.c deleted file mode 100644 index ff35161462c..00000000000 --- a/gcc/testsuite/gcc.target/avr/tiny-caller-save.c +++ /dev/null @@ -1,78 +0,0 @@ -/* { dg-do compile { target avr_tiny } } */ -/* { dg-options "-mmcu=avrtiny -gdwarf -Os" } */ - -/* This is a stripped down piece of libgcc2.c that triggerd an ICE for avr with - "-mmcu=avrtiny -g -Os"; replace_reg_with_saved_mem would generate: - (concatn:SI [ - (reg:SI 18 r18) - (reg:SI 19 r19) - (mem/c:QI (plus:HI (reg/f:HI 28 r28) - (const_int 43 [0x2b])) [6 S1 A8]) - (mem/c:QI (plus:HI (reg/f:HI 28 r28) - (const_int 44 [0x2c])) [6 S1 A8]) - ]) */ - -typedef int SItype __attribute__ ((mode (SI))); -typedef unsigned int USItype __attribute__ ((mode (SI))); -typedef int DItype __attribute__ ((mode (DI))); -typedef unsigned int UDItype __attribute__ ((mode (DI))); -struct DWstruct -{ - SItype low, high; -}; -typedef union -{ - struct DWstruct s; - DItype ll; -} DWunion; - -UDItype -__udivmoddi4 (UDItype n, UDItype d) -{ - const DWunion nn = {.ll = n }; - const DWunion dd = {.ll = d }; - USItype d0, d1, n2; - USItype q0; - - d0 = dd.s.low; - d1 = dd.s.high; - n2 = nn.s.high; - - USItype m0; - - do - { - USItype __d1, __d0, __q1, __q0; - USItype __r1, __m; - __d1 = ((USItype) (d1) >> 16); - __d0 = ((USItype) (d1) & (((USItype) 1 << 16) - 1)); - __r1 = (n2) % __d1; - __q1 = (n2) / __d1; - __m = (USItype) __q1 *__d0; - __r1 -= __m; - __q0 = __r1 / __d1; - (q0) = (USItype) __q1 *((USItype) 1 << 16) | __q0; - } - while (0); - do - { - USItype __x0, __x1, __x2; - USItype __ul, __vl, __uh, __vh; - __ul = ((USItype) (q0) & (((USItype) 1 << 16) - 1)); - __uh = ((USItype) (q0) >> 16); - __vl = ((USItype) (d0) & (((USItype) 1 << 16) - 1)); - __vh = ((USItype) (d0) >> 16); - __x0 = (USItype) __ul *__vl; - __x1 = (USItype) __ul *__vh; - __x2 = (USItype) __uh *__vl; - __x1 += ((USItype) (__x0) >> 16); - __x1 += __x2; - (m0) = - ((USItype) (__x1) & (((USItype) 1 << 16) - 1)) * - ((USItype) 1 << 16) + - ((USItype) (__x0) & (((USItype) 1 << 16) - 1)); - } - while (0); - -return m0; -} diff --git a/gcc/testsuite/gcc.target/avr/tiny-memx.c b/gcc/testsuite/gcc.target/avr/tiny-memx.c deleted file mode 100644 index f691dcfb83f..00000000000 --- a/gcc/testsuite/gcc.target/avr/tiny-memx.c +++ /dev/null @@ -1,4 +0,0 @@ -/* { dg-do compile { target avr_tiny } } */ -/* { dg-options "-mmcu=avrtiny" } */ - -const __memx char ascmonth[] = "Jan"; /* { dg-error "not supported" } */