mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-02-06 22:40:36 +08:00
* m32c/varvects.S: New.
* m32c/varvects.h: New. * m32c/sample.c: New. * m32c/Makefile.in: Add m32cgloss library support. * m32c/crt0.S: Tweaks to support interrupts by default. * m32c/m32c.tmpl: Likewise.
This commit is contained in:
parent
a890f63b33
commit
5025fc547d
@ -1,3 +1,12 @@
|
|||||||
|
2008-09-24 DJ Delorie <dj@redhat.com>
|
||||||
|
|
||||||
|
* m32c/varvects.S: New.
|
||||||
|
* m32c/varvects.h: New.
|
||||||
|
* m32c/sample.c: New.
|
||||||
|
* m32c/Makefile.in: Add m32cgloss library support.
|
||||||
|
* m32c/crt0.S: Tweaks to support interrupts by default.
|
||||||
|
* m32c/m32c.tmpl: Likewise.
|
||||||
|
|
||||||
2008-09-10 Ken Werner <ken.werner@de.ibm.com>
|
2008-09-10 Ken Werner <ken.werner@de.ibm.com>
|
||||||
|
|
||||||
* spu/dirfuncs.c: Avoid warnings.
|
* spu/dirfuncs.c: Avoid warnings.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2005 Red Hat Inc
|
# Copyright (c) 2005,2008 Red Hat Inc
|
||||||
#
|
#
|
||||||
# The authors hereby grant permission to use, copy, modify, distribute,
|
# The authors hereby grant permission to use, copy, modify, distribute,
|
||||||
# and license this software and its documentation for any purpose, provided
|
# and license this software and its documentation for any purpose, provided
|
||||||
@ -56,9 +56,11 @@ OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \
|
|||||||
then echo ${objroot}/../binutils/objcopy ; \
|
then echo ${objroot}/../binutils/objcopy ; \
|
||||||
else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi`
|
else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi`
|
||||||
|
|
||||||
|
HEADERS = varvects.h
|
||||||
SCRIPTS = r8c.ld m16c.ld m32cm.ld m32c.ld m16cmon.ld m32cmon.ld sim8.ld sim16.ld sim24.ld
|
SCRIPTS = r8c.ld m16c.ld m32cm.ld m32c.ld m16cmon.ld m32cmon.ld sim8.ld sim16.ld sim24.ld
|
||||||
CRT = crt0.o crtn.o
|
CRT = crt0.o crtn.o
|
||||||
SIM_BSP = libsim.a
|
SIM_BSP = libsim.a
|
||||||
|
M32C_BSP = libm32cgloss.a
|
||||||
LIBNOSYS = ../libnosys/libnosys.a
|
LIBNOSYS = ../libnosys/libnosys.a
|
||||||
SIM_OBJS = \
|
SIM_OBJS = \
|
||||||
sbrk.o \
|
sbrk.o \
|
||||||
@ -85,7 +87,8 @@ SIM_OBJS = \
|
|||||||
link.o \
|
link.o \
|
||||||
isatty.o \
|
isatty.o \
|
||||||
abort.o
|
abort.o
|
||||||
|
M32C_OBJS = \
|
||||||
|
varvects.o
|
||||||
|
|
||||||
#### Host specific Makefile fragment comes in here.
|
#### Host specific Makefile fragment comes in here.
|
||||||
@host_makefile_frag@
|
@host_makefile_frag@
|
||||||
@ -95,12 +98,16 @@ SIM_OBJS = \
|
|||||||
.S.o:
|
.S.o:
|
||||||
$(CC) -Wa,-gdwarf2 -Wa,-I$(srcdir) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $<
|
$(CC) -Wa,-gdwarf2 -Wa,-I$(srcdir) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $<
|
||||||
|
|
||||||
all: $(CRT) $(SIM_BSP) $(SCRIPTS)
|
all: $(CRT) $(SIM_BSP) $(M32C_BSP) $(SCRIPTS)
|
||||||
|
|
||||||
$(SIM_BSP): $(SIM_OBJS)
|
$(SIM_BSP): $(SIM_OBJS)
|
||||||
$(AR) $(ARFLAGS) $@ $?
|
$(AR) $(ARFLAGS) $@ $?
|
||||||
$(RANLIB) $@
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
$(M32C_BSP): $(M32C_OBJS)
|
||||||
|
$(AR) $(ARFLAGS) $@ $?
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
# genscript parameters: srcdir name ramstart ramsize romstart romsize vecprefix
|
# genscript parameters: srcdir name ramstart ramsize romstart romsize vecprefix
|
||||||
|
|
||||||
GDEP = $(srcdir)/m32c.tmpl $(srcdir)/genscript Makefile
|
GDEP = $(srcdir)/m32c.tmpl $(srcdir)/genscript Makefile
|
||||||
@ -167,12 +174,16 @@ unlink.o : $(SDEPS)
|
|||||||
utime.o : $(SDEPS)
|
utime.o : $(SDEPS)
|
||||||
write.o : $(SDEPS)
|
write.o : $(SDEPS)
|
||||||
|
|
||||||
install: $(CRT) $(SIM_BSP) $(SCRIPTS)
|
install: $(CRT) $(SIM_BSP) $(M32C_BSP) $(SCRIPTS)
|
||||||
for c in $(CRT) $(SIM_BSP); do \
|
for c in $(CRT) $(SIM_BSP) $(M32C_BSP); do \
|
||||||
$(INSTALL_DATA) $$c $(tooldir)/lib${MULTISUBDIR}/$$c ;\
|
$(INSTALL_DATA) $$c $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$$c ;\
|
||||||
done
|
done
|
||||||
for c in $(SCRIPTS); do \
|
for c in $(SCRIPTS); do \
|
||||||
$(INSTALL_DATA) $$c $(tooldir)/lib${MULTISUBDIR}/$$c ;\
|
$(INSTALL_DATA) $$c $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$$c ;\
|
||||||
|
done
|
||||||
|
for c in $(HEADERS); do \
|
||||||
|
$(INSTALL_DATA) ${srcdir}/$$c \
|
||||||
|
$(DESTDIR)$(tooldir)/include/$$c ;\
|
||||||
done
|
done
|
||||||
|
|
||||||
clean mostlyclean:
|
clean mostlyclean:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
Copyright (c) 2005 Red Hat Incorporated.
|
Copyright (c) 2005,2008 Red Hat Incorporated.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
@ -42,12 +42,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#define ALIGN 2
|
#define ALIGN 2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
.section ".resetvec","ax",@progbits
|
||||||
|
.long _start
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
.global _start
|
.global _start
|
||||||
_start:
|
_start:
|
||||||
.LFB2:
|
.LFB2:
|
||||||
fset U /* User stack */
|
fclr U /* One stack for user and interrupts */
|
||||||
ldc #__stack,sp
|
ldc #__stack,sp
|
||||||
|
|
||||||
#ifdef A16
|
#ifdef A16
|
||||||
@ -72,6 +75,14 @@ _start:
|
|||||||
mov.w #0,r0
|
mov.w #0,r0
|
||||||
sstr.w
|
sstr.w
|
||||||
|
|
||||||
|
#ifdef A16
|
||||||
|
ldc #%lo16(__var_vects),intbl
|
||||||
|
ldc #%hi16(__var_vects),intbh
|
||||||
|
#else
|
||||||
|
ldc #__var_vects,intb
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fset I
|
||||||
jsr.a __m32c_init
|
jsr.a __m32c_init
|
||||||
|
|
||||||
jsr.a _main
|
jsr.a _main
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
Copyright (c) 2005 Red Hat Incorporated.
|
Copyright (c) 2005,2008 Red Hat Incorporated.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
@ -35,6 +35,7 @@ OUTPUT_FORMAT("elf32-m32c", "elf32-m32c",
|
|||||||
"elf32-m32c")
|
"elf32-m32c")
|
||||||
OUTPUT_ARCH(m32c)
|
OUTPUT_ARCH(m32c)
|
||||||
ENTRY(_start)
|
ENTRY(_start)
|
||||||
|
INPUT(-lm32cgloss)
|
||||||
/* Do we need any of these for elf?
|
/* Do we need any of these for elf?
|
||||||
__DYNAMIC = 0; */
|
__DYNAMIC = 0; */
|
||||||
MEMORY {
|
MEMORY {
|
||||||
@ -132,6 +133,8 @@ SECTIONS
|
|||||||
SORT(CONSTRUCTORS)
|
SORT(CONSTRUCTORS)
|
||||||
*(.data1)
|
*(.data1)
|
||||||
*(.got.plt) *(.got)
|
*(.got.plt) *(.got)
|
||||||
|
PROVIDE (__var_vect_start = .);
|
||||||
|
*(.var_vects)
|
||||||
|
|
||||||
. = ALIGN(2);
|
. = ALIGN(2);
|
||||||
_edata = .;
|
_edata = .;
|
||||||
|
159
libgloss/m32c/sample.c
Normal file
159
libgloss/m32c/sample.c
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 2008 Red Hat Incorporated.
|
||||||
|
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.
|
||||||
|
|
||||||
|
The name of Red Hat Incorporated may not 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 RED HAT INCORPORATED 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.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* This is a sample program that shows how to use a few of the
|
||||||
|
features of the M32C port of GCC, Binutils, and Newlib. */
|
||||||
|
|
||||||
|
#include <varvects.h>
|
||||||
|
|
||||||
|
typedef unsigned char byte;
|
||||||
|
typedef unsigned short word;
|
||||||
|
|
||||||
|
#define prcr (*(volatile byte *)0x000a)
|
||||||
|
#define cm0 (*(volatile byte *)0x0006)
|
||||||
|
#define cm1 (*(volatile byte *)0x0007)
|
||||||
|
#define ocd (*(volatile byte *)0x000c)
|
||||||
|
|
||||||
|
#ifdef __r8c_cpu__
|
||||||
|
/* These are for the R8C/20 with LEDs on port P2 */
|
||||||
|
|
||||||
|
#define tracr (*(volatile byte *)0x0100)
|
||||||
|
#define traioc (*(volatile byte *)0x0101)
|
||||||
|
#define tramr (*(volatile byte *)0x0102)
|
||||||
|
#define trapre (*(volatile byte *)0x0103)
|
||||||
|
#define tra (*(volatile byte *)0x0104)
|
||||||
|
#define traic (*(volatile byte *)0x0056)
|
||||||
|
|
||||||
|
#define pd2 (*(volatile byte *)0x00e6)
|
||||||
|
#define p2 (*(volatile byte *)0x00e4)
|
||||||
|
|
||||||
|
#define ivec_timer_ra 22
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __m32c_cpu__
|
||||||
|
/* These are for the M32C/83 with LEDs on port P0 and P1 */
|
||||||
|
|
||||||
|
#define ta0 (*(volatile word *)0x0346)
|
||||||
|
#define ta0mr (*(volatile byte *)0x0356)
|
||||||
|
#define tabsr (*(volatile byte *)0x0340)
|
||||||
|
#define ta0ic (*(volatile byte *)0x006c)
|
||||||
|
|
||||||
|
#define pd0 (*(volatile byte *)0x03e2)
|
||||||
|
#define pd1 (*(volatile byte *)0x03e3)
|
||||||
|
#define p0 (*(volatile byte *)0x03e0)
|
||||||
|
#define p1 (*(volatile byte *)0x03e1)
|
||||||
|
|
||||||
|
#define ivec_timer_a0 12
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Newlib's exit() pulls in lots of other things. Main() should never
|
||||||
|
exit, but if it did, you could hard-reset the chip here. */
|
||||||
|
void
|
||||||
|
exit(int rv)
|
||||||
|
{
|
||||||
|
while (1)
|
||||||
|
asm volatile ("");
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __r8c_cpu__
|
||||||
|
/* The "constructor" attribute causes the startup code to call this
|
||||||
|
sometime before main() is called. */
|
||||||
|
__attribute__((constructor))
|
||||||
|
void
|
||||||
|
fast_clock(void)
|
||||||
|
{
|
||||||
|
asm("fclr I");
|
||||||
|
prcr = 1;
|
||||||
|
cm0 = 0x08;
|
||||||
|
cm1 = 0x38;
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
asm("nop");
|
||||||
|
ocd = 0;
|
||||||
|
prcr = 0;
|
||||||
|
asm("fset I");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* We mark this volatile in case a non-interrupt function wants to
|
||||||
|
read it, else gcc may optimize away extra reads. */
|
||||||
|
static volatile int tc = 1;
|
||||||
|
|
||||||
|
/* The "interrupt" attribute changes the function entry/exit to
|
||||||
|
properly preserve any changed registers. */
|
||||||
|
static void __attribute__((interrupt))
|
||||||
|
timer_ra_interrupt()
|
||||||
|
{
|
||||||
|
tc ++;
|
||||||
|
#ifdef __r8c_cpu__
|
||||||
|
p2 = tc >> 4;
|
||||||
|
#else
|
||||||
|
p1 = tc;
|
||||||
|
p0 = tc >> 8;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
main()
|
||||||
|
{
|
||||||
|
#ifdef __r8c_cpu__
|
||||||
|
pd2 = 0xff;
|
||||||
|
|
||||||
|
/* TIMER RA */
|
||||||
|
tracr = 0x00;
|
||||||
|
traioc = 0x00;
|
||||||
|
tramr = 0x00; /* timer mode, f1 */
|
||||||
|
trapre = 255; /* prescaler */
|
||||||
|
tra = 255; /* cycle count */
|
||||||
|
|
||||||
|
_set_var_vect (timer_ra_interrupt, ivec_timer_ra);
|
||||||
|
traic = 5;
|
||||||
|
tracr = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __m32c_cpu__
|
||||||
|
pd0 = 0xff;
|
||||||
|
pd1 = 0xff;
|
||||||
|
|
||||||
|
/* TIMER A0 */
|
||||||
|
ta0mr = 0x00; /* Timer A0 mode register */
|
||||||
|
ta0 = 65535; /* Timer A0 register */
|
||||||
|
|
||||||
|
_set_var_vect (timer_ra_interrupt, ivec_timer_a0);
|
||||||
|
ta0ic = 5;
|
||||||
|
tabsr = 0xff;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* main() must never return. */
|
||||||
|
while (1)
|
||||||
|
;
|
||||||
|
}
|
43
libgloss/m32c/varvects.S
Normal file
43
libgloss/m32c/varvects.S
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 2008 Red Hat Incorporated.
|
||||||
|
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.
|
||||||
|
|
||||||
|
The name of Red Hat Incorporated may not 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 RED HAT INCORPORATED 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.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* This works with varvects.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
.section ".var_vects","aw",@progbits
|
||||||
|
.global __var_vects
|
||||||
|
.type __var_vects,@object
|
||||||
|
.size __var_vects, 256
|
||||||
|
__var_vects:
|
||||||
|
.zero 256
|
||||||
|
|
||||||
|
.text
|
54
libgloss/m32c/varvects.h
Normal file
54
libgloss/m32c/varvects.h
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 2008 Red Hat Incorporated.
|
||||||
|
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.
|
||||||
|
|
||||||
|
The name of Red Hat Incorporated may not 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 RED HAT INCORPORATED 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.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* This file defines the interface to the built-in variable vector
|
||||||
|
table in R8C/M16C/M32C chips. */
|
||||||
|
|
||||||
|
#ifndef _VARVECTS_H_
|
||||||
|
#define _VARVECTS_H_
|
||||||
|
|
||||||
|
typedef void (*_m32c_interrupt_func)() __attribute__((mode(SI)));
|
||||||
|
extern _m32c_interrupt_func _var_vects[];
|
||||||
|
|
||||||
|
#if defined(__r8c_cpu__) || defined (__m16c_cpu__)
|
||||||
|
|
||||||
|
#define _set_var_vect(f,n) \
|
||||||
|
{ asm ("mov.w #%%lo16(%d0),__var_vects+%d1" : : "s" (f), "g" (n*4)); \
|
||||||
|
asm ("mov.w #%%hi16(%d0),__var_vects+%d1" : : "s" (f), "g" (n*4+2)); }
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define _set_var_vect(f,n) \
|
||||||
|
_var_vects[n] = f
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
Loading…
x
Reference in New Issue
Block a user