This change applies an atomic variable to check if we really need to obtain a mutex, and uses a condition variable to notify. See about 5% improvement in the simulation speed. Change-Id: I7e165987dcb587b27fae90978b9b3fde6f5563ef Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/34915 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Richard Cooper <richard.cooper@arm.com> Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br> Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com>
122 lines
4.9 KiB
Python
122 lines
4.9 KiB
Python
# -*- mode:python -*-
|
|
|
|
# Copyright (c) 2006 The Regents of The University of Michigan
|
|
# 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 its
|
|
# 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.
|
|
|
|
Import('*')
|
|
|
|
SimObject('Graphics.py')
|
|
Source('atomicio.cc')
|
|
GTest('atomicio.test', 'atomicio.test.cc', 'atomicio.cc')
|
|
Source('bitfield.cc')
|
|
GTest('bitfield.test', 'bitfield.test.cc', 'bitfield.cc')
|
|
Source('imgwriter.cc')
|
|
Source('bmpwriter.cc')
|
|
Source('channel_addr.cc')
|
|
Source('cprintf.cc', add_tags='gtest lib')
|
|
GTest('cprintf.test', 'cprintf.test.cc')
|
|
Source('debug.cc')
|
|
if env['USE_FENV']:
|
|
Source('fenv.c')
|
|
if env['USE_PNG']:
|
|
Source('pngwriter.cc')
|
|
Source('fiber.cc')
|
|
GTest('fiber.test', 'fiber.test.cc', 'fiber.cc')
|
|
GTest('coroutine.test', 'coroutine.test.cc', 'fiber.cc')
|
|
Source('framebuffer.cc')
|
|
Source('hostinfo.cc')
|
|
Source('inet.cc')
|
|
Source('inifile.cc')
|
|
GTest('inifile.test', 'inifile.test.cc', 'inifile.cc', 'str.cc')
|
|
GTest('intmath.test', 'intmath.test.cc')
|
|
Source('logging.cc')
|
|
Source('match.cc')
|
|
GTest('match.test', 'match.test.cc', 'match.cc', 'str.cc')
|
|
Source('output.cc')
|
|
Source('pixel.cc')
|
|
GTest('pixel.test', 'pixel.test.cc', 'pixel.cc')
|
|
Source('pollevent.cc')
|
|
Source('random.cc')
|
|
if env['TARGET_ISA'] != 'null':
|
|
Source('remote_gdb.cc')
|
|
Source('socket.cc')
|
|
GTest('socket.test', 'socket.test.cc', 'socket.cc')
|
|
Source('statistics.cc')
|
|
Source('str.cc')
|
|
GTest('str.test', 'str.test.cc', 'str.cc')
|
|
Source('time.cc')
|
|
Source('version.cc')
|
|
Source('trace.cc')
|
|
GTest('trie.test', 'trie.test.cc')
|
|
Source('types.cc')
|
|
GTest('types.test', 'types.test.cc', 'types.cc')
|
|
GTest('uncontended_mutex.test', 'uncontended_mutex.test.cc')
|
|
|
|
Source('stats/group.cc')
|
|
Source('stats/text.cc')
|
|
if env['USE_HDF5']:
|
|
if main['GCC']:
|
|
Source('stats/hdf5.cc', append={'CXXFLAGS': '-Wno-deprecated-copy'})
|
|
else:
|
|
Source('stats/hdf5.cc')
|
|
|
|
GTest('addr_range.test', 'addr_range.test.cc')
|
|
GTest('addr_range_map.test', 'addr_range_map.test.cc')
|
|
GTest('bitunion.test', 'bitunion.test.cc')
|
|
GTest('channel_addr.test', 'channel_addr.test.cc', 'channel_addr.cc')
|
|
GTest('circlebuf.test', 'circlebuf.test.cc')
|
|
GTest('circular_queue.test', 'circular_queue.test.cc')
|
|
GTest('sat_counter.test', 'sat_counter.test.cc')
|
|
GTest('refcnt.test','refcnt.test.cc')
|
|
GTest('condcodes.test', 'condcodes.test.cc')
|
|
GTest('chunk_generator.test', 'chunk_generator.test.cc')
|
|
|
|
DebugFlag('Annotate', "State machine annotation debugging")
|
|
DebugFlag('AnnotateQ', "State machine annotation queue debugging")
|
|
DebugFlag('AnnotateVerbose', "Dump all state machine annotation details")
|
|
DebugFlag('FmtFlag', "Show the --debug-flag that enabled each debug message")
|
|
DebugFlag('FmtStackTrace',
|
|
"Print a stack trace after every debug message")
|
|
DebugFlag('FmtTicksOff', "Don't show tick count on debug messages")
|
|
DebugFlag('GDBAcc', "Remote debugger accesses")
|
|
DebugFlag('GDBExtra', "Dump extra information on reads and writes")
|
|
DebugFlag('GDBMisc', "Breakpoints, traps, watchpoints, etc.")
|
|
DebugFlag('GDBRead', "Reads to the remote address space")
|
|
DebugFlag('GDBRecv', "Messages received from the remote application")
|
|
DebugFlag('GDBSend', "Messages sent to the remote application")
|
|
DebugFlag('GDBWrite', "Writes to the remote address space")
|
|
DebugFlag('SQL', "SQL queries sent to the server")
|
|
DebugFlag('Stats', "Statistics management")
|
|
DebugFlag('StatEvents', "Statistics event tracking")
|
|
|
|
CompoundFlag('GDBAll',
|
|
[ 'GDBMisc', 'GDBAcc', 'GDBRead', 'GDBWrite', 'GDBSend', 'GDBRecv',
|
|
'GDBExtra' ],
|
|
desc="All Remote debugging flags")
|
|
CompoundFlag('AnnotateAll', ['Annotate', 'AnnotateQ', 'AnnotateVerbose'],
|
|
desc="All Annotation flags")
|
|
|