|
|	tbldo.sa 3.1 12/10/90
|
| Modified:
|	8/16/90	chinds	The table was constructed to use only one level
|			of indirection in do_func for monadic
|			functions.  Dyadic functions require two
|			levels, and the tables are still contained
|			in do_func.  The table is arranged for
|			index with a 10-bit index, with the first
|			7 bits the opcode, and the remaining 3
|			the stag.  For dyadic functions, all
|			valid addresses are to the generic entry
|			point.
|

|		Copyright (C) Motorola, Inc. 1990
|			All Rights Reserved
|
|       For details on the license for this file, please see the
|       file, README, in this same directory.

|TBLDO	idnt    2,1 | Motorola 040 Floating Point Software Package

	|section	8

	|xref	ld_pinf,ld_pone,ld_ppi2
	|xref	t_dz2,t_operr
	|xref	serror,sone,szero,sinf,snzrinx
	|xref	sopr_inf,spi_2,src_nan,szr_inf

	|xref	smovcr
	|xref	pmod,prem,pscale
	|xref	satanh,satanhd
	|xref	sacos,sacosd,sasin,sasind,satan,satand
	|xref	setox,setoxd,setoxm1,setoxm1d,setoxm1i
	|xref	sgetexp,sgetexpd,sgetman,sgetmand
	|xref	sint,sintd,sintrz
	|xref	ssincos,ssincosd,ssincosi,ssincosnan,ssincosz
	|xref	scos,scosd,ssin,ssind,stan,stand
	|xref	scosh,scoshd,ssinh,ssinhd,stanh,stanhd
	|xref	sslog10,sslog2,sslogn,sslognp1
	|xref	sslog10d,sslog2d,sslognd,slognp1d
	|xref	stentox,stentoxd,stwotox,stwotoxd

|	instruction		;opcode-stag Notes
	.global	tblpre
tblpre:
	.long	smovcr		|$00-0 fmovecr all
	.long	smovcr		|$00-1 fmovecr all
	.long	smovcr		|$00-2 fmovecr all
	.long	smovcr		|$00-3 fmovecr all
	.long	smovcr		|$00-4 fmovecr all
	.long	smovcr		|$00-5 fmovecr all
	.long	smovcr		|$00-6 fmovecr all
	.long	smovcr		|$00-7 fmovecr all

	.long	sint		|$01-0 fint norm
	.long	szero		|$01-1 fint zero
	.long	sinf		|$01-2 fint inf
	.long	src_nan		|$01-3 fint nan
	.long	sintd		|$01-4 fint denorm inx
	.long	serror		|$01-5 fint ERROR
	.long	serror		|$01-6 fint ERROR
	.long	serror		|$01-7 fint ERROR

	.long	ssinh		|$02-0 fsinh norm
	.long	szero		|$02-1 fsinh zero
	.long	sinf		|$02-2 fsinh inf
	.long	src_nan		|$02-3 fsinh nan
	.long	ssinhd		|$02-4 fsinh denorm
	.long	serror		|$02-5 fsinh ERROR
	.long	serror		|$02-6 fsinh ERROR
	.long	serror		|$02-7 fsinh ERROR

	.long	sintrz		|$03-0 fintrz norm
	.long	szero		|$03-1 fintrz zero
	.long	sinf		|$03-2 fintrz inf
	.long	src_nan		|$03-3 fintrz nan
	.long	snzrinx		|$03-4 fintrz denorm inx
	.long	serror		|$03-5 fintrz ERROR
	.long	serror		|$03-6 fintrz ERROR
	.long	serror		|$03-7 fintrz ERROR

	.long	serror		|$04-0 ERROR - illegal extension
	.long	serror		|$04-1 ERROR - illegal extension
	.long	serror		|$04-2 ERROR - illegal extension
	.long	serror		|$04-3 ERROR - illegal extension
	.long	serror		|$04-4 ERROR - illegal extension
	.long	serror		|$04-5 ERROR - illegal extension
	.long	serror		|$04-6 ERROR - illegal extension
	.long	serror		|$04-7 ERROR - illegal extension

	.long	serror		|$05-0 ERROR - illegal extension
	.long	serror		|$05-1 ERROR - illegal extension
	.long	serror		|$05-2 ERROR - illegal extension
	.long	serror		|$05-3 ERROR - illegal extension
	.long	serror		|$05-4 ERROR - illegal extension
	.long	serror		|$05-5 ERROR - illegal extension
	.long	serror		|$05-6 ERROR - illegal extension
	.long	serror		|$05-7 ERROR - illegal extension

	.long	sslognp1	|$06-0 flognp1 norm
	.long	szero		|$06-1 flognp1 zero
	.long	sopr_inf	|$06-2 flognp1 inf
	.long	src_nan		|$06-3 flognp1 nan
	.long	slognp1d	|$06-4 flognp1 denorm
	.long	serror		|$06-5 flognp1 ERROR
	.long	serror		|$06-6 flognp1 ERROR
	.long	serror		|$06-7 flognp1 ERROR

	.long	serror		|$07-0 ERROR - illegal extension
	.long	serror		|$07-1 ERROR - illegal extension
	.long	serror		|$07-2 ERROR - illegal extension
	.long	serror		|$07-3 ERROR - illegal extension
	.long	serror		|$07-4 ERROR - illegal extension
	.long	serror		|$07-5 ERROR - illegal extension
	.long	serror		|$07-6 ERROR - illegal extension
	.long	serror		|$07-7 ERROR - illegal extension

	.long	setoxm1		|$08-0 fetoxm1 norm
	.long	szero		|$08-1 fetoxm1 zero
	.long	setoxm1i	|$08-2 fetoxm1 inf
	.long	src_nan		|$08-3 fetoxm1 nan
	.long	setoxm1d	|$08-4 fetoxm1 denorm
	.long	serror		|$08-5 fetoxm1 ERROR
	.long	serror		|$08-6 fetoxm1 ERROR
	.long	serror		|$08-7 fetoxm1 ERROR

	.long	stanh		|$09-0 ftanh norm
	.long	szero		|$09-1 ftanh zero
	.long	sone		|$09-2 ftanh inf
	.long	src_nan		|$09-3 ftanh nan
	.long	stanhd		|$09-4 ftanh denorm
	.long	serror		|$09-5 ftanh ERROR
	.long	serror		|$09-6 ftanh ERROR
	.long	serror		|$09-7 ftanh ERROR

	.long	satan		|$0a-0 fatan norm
	.long	szero		|$0a-1 fatan zero
	.long	spi_2		|$0a-2 fatan inf
	.long	src_nan		|$0a-3 fatan nan
	.long	satand		|$0a-4 fatan denorm
	.long	serror		|$0a-5 fatan ERROR
	.long	serror		|$0a-6 fatan ERROR
	.long	serror		|$0a-7 fatan ERROR

	.long	serror		|$0b-0 ERROR - illegal extension
	.long	serror		|$0b-1 ERROR - illegal extension
	.long	serror		|$0b-2 ERROR - illegal extension
	.long	serror		|$0b-3 ERROR - illegal extension
	.long	serror		|$0b-4 ERROR - illegal extension
	.long	serror		|$0b-5 ERROR - illegal extension
	.long	serror		|$0b-6 ERROR - illegal extension
	.long	serror		|$0b-7 ERROR - illegal extension

	.long	sasin		|$0c-0 fasin norm
	.long	szero		|$0c-1 fasin zero
	.long	t_operr		|$0c-2 fasin inf
	.long	src_nan		|$0c-3 fasin nan
	.long	sasind		|$0c-4 fasin denorm
	.long	serror		|$0c-5 fasin ERROR
	.long	serror		|$0c-6 fasin ERROR
	.long	serror		|$0c-7 fasin ERROR

	.long	satanh		|$0d-0 fatanh norm
	.long	szero		|$0d-1 fatanh zero
	.long	t_operr		|$0d-2 fatanh inf
	.long	src_nan		|$0d-3 fatanh nan
	.long	satanhd		|$0d-4 fatanh denorm
	.long	serror		|$0d-5 fatanh ERROR
	.long	serror		|$0d-6 fatanh ERROR
	.long	serror		|$0d-7 fatanh ERROR

	.long	ssin		|$0e-0 fsin norm
	.long	szero		|$0e-1 fsin zero
	.long	t_operr		|$0e-2 fsin inf
	.long	src_nan		|$0e-3 fsin nan
	.long	ssind		|$0e-4 fsin denorm
	.long	serror		|$0e-5 fsin ERROR
	.long	serror		|$0e-6 fsin ERROR
	.long	serror		|$0e-7 fsin ERROR

	.long	stan		|$0f-0 ftan norm
	.long	szero		|$0f-1 ftan zero
	.long	t_operr		|$0f-2 ftan inf
	.long	src_nan		|$0f-3 ftan nan
	.long	stand		|$0f-4 ftan denorm
	.long	serror		|$0f-5 ftan ERROR
	.long	serror		|$0f-6 ftan ERROR
	.long	serror		|$0f-7 ftan ERROR

	.long	setox		|$10-0 fetox norm
	.long	ld_pone		|$10-1 fetox zero
	.long	szr_inf		|$10-2 fetox inf
	.long	src_nan		|$10-3 fetox nan
	.long	setoxd		|$10-4 fetox denorm
	.long	serror		|$10-5 fetox ERROR
	.long	serror		|$10-6 fetox ERROR
	.long	serror		|$10-7 fetox ERROR

	.long	stwotox		|$11-0 ftwotox norm
	.long	ld_pone		|$11-1 ftwotox zero
	.long	szr_inf		|$11-2 ftwotox inf
	.long	src_nan		|$11-3 ftwotox nan
	.long	stwotoxd	|$11-4 ftwotox denorm
	.long	serror		|$11-5 ftwotox ERROR
	.long	serror		|$11-6 ftwotox ERROR
	.long	serror		|$11-7 ftwotox ERROR

	.long	stentox		|$12-0 ftentox norm
	.long	ld_pone		|$12-1 ftentox zero
	.long	szr_inf		|$12-2 ftentox inf
	.long	src_nan		|$12-3 ftentox nan
	.long	stentoxd	|$12-4 ftentox denorm
	.long	serror		|$12-5 ftentox ERROR
	.long	serror		|$12-6 ftentox ERROR
	.long	serror		|$12-7 ftentox ERROR

	.long	serror		|$13-0 ERROR - illegal extension
	.long	serror		|$13-1 ERROR - illegal extension
	.long	serror		|$13-2 ERROR - illegal extension
	.long	serror		|$13-3 ERROR - illegal extension
	.long	serror		|$13-4 ERROR - illegal extension
	.long	serror		|$13-5 ERROR - illegal extension
	.long	serror		|$13-6 ERROR - illegal extension
	.long	serror		|$13-7 ERROR - illegal extension

	.long	sslogn		|$14-0 flogn norm
	.long	t_dz2		|$14-1 flogn zero
	.long	sopr_inf	|$14-2 flogn inf
	.long	src_nan		|$14-3 flogn nan
	.long	sslognd		|$14-4 flogn denorm
	.long	serror		|$14-5 flogn ERROR
	.long	serror		|$14-6 flogn ERROR
	.long	serror		|$14-7 flogn ERROR

	.long	sslog10		|$15-0 flog10 norm
	.long	t_dz2		|$15-1 flog10 zero
	.long	sopr_inf	|$15-2 flog10 inf
	.long	src_nan		|$15-3 flog10 nan
	.long	sslog10d	|$15-4 flog10 denorm
	.long	serror		|$15-5 flog10 ERROR
	.long	serror		|$15-6 flog10 ERROR
	.long	serror		|$15-7 flog10 ERROR

	.long	sslog2		|$16-0 flog2 norm
	.long	t_dz2		|$16-1 flog2 zero
	.long	sopr_inf	|$16-2 flog2 inf
	.long	src_nan		|$16-3 flog2 nan
	.long	sslog2d		|$16-4 flog2 denorm
	.long	serror		|$16-5 flog2 ERROR
	.long	serror		|$16-6 flog2 ERROR
	.long	serror		|$16-7 flog2 ERROR

	.long	serror		|$17-0 ERROR - illegal extension
	.long	serror		|$17-1 ERROR - illegal extension
	.long	serror		|$17-2 ERROR - illegal extension
	.long	serror		|$17-3 ERROR - illegal extension
	.long	serror		|$17-4 ERROR - illegal extension
	.long	serror		|$17-5 ERROR - illegal extension
	.long	serror		|$17-6 ERROR - illegal extension
	.long	serror		|$17-7 ERROR - illegal extension

	.long	serror		|$18-0 ERROR - illegal extension
	.long	serror		|$18-1 ERROR - illegal extension
	.long	serror		|$18-2 ERROR - illegal extension
	.long	serror		|$18-3 ERROR - illegal extension
	.long	serror		|$18-4 ERROR - illegal extension
	.long	serror		|$18-5 ERROR - illegal extension
	.long	serror		|$18-6 ERROR - illegal extension
	.long	serror		|$18-7 ERROR - illegal extension

	.long	scosh		|$19-0 fcosh norm
	.long	ld_pone		|$19-1 fcosh zero
	.long	ld_pinf		|$19-2 fcosh inf
	.long	src_nan		|$19-3 fcosh nan
	.long	scoshd		|$19-4 fcosh denorm
	.long	serror		|$19-5 fcosh ERROR
	.long	serror		|$19-6 fcosh ERROR
	.long	serror		|$19-7 fcosh ERROR

	.long	serror		|$1a-0 ERROR - illegal extension
	.long	serror		|$1a-1 ERROR - illegal extension
	.long	serror		|$1a-2 ERROR - illegal extension
	.long	serror		|$1a-3 ERROR - illegal extension
	.long	serror		|$1a-4 ERROR - illegal extension
	.long	serror		|$1a-5 ERROR - illegal extension
	.long	serror		|$1a-6 ERROR - illegal extension
	.long	serror		|$1a-7 ERROR - illegal extension

	.long	serror		|$1b-0 ERROR - illegal extension
	.long	serror		|$1b-1 ERROR - illegal extension
	.long	serror		|$1b-2 ERROR - illegal extension
	.long	serror		|$1b-3 ERROR - illegal extension
	.long	serror		|$1b-4 ERROR - illegal extension
	.long	serror		|$1b-5 ERROR - illegal extension
	.long	serror		|$1b-6 ERROR - illegal extension
	.long	serror		|$1b-7 ERROR - illegal extension

	.long	sacos		|$1c-0 facos norm
	.long	ld_ppi2		|$1c-1 facos zero
	.long	t_operr		|$1c-2 facos inf
	.long	src_nan		|$1c-3 facos nan
	.long	sacosd		|$1c-4 facos denorm
	.long	serror		|$1c-5 facos ERROR
	.long	serror		|$1c-6 facos ERROR
	.long	serror		|$1c-7 facos ERROR

	.long	scos		|$1d-0 fcos norm
	.long	ld_pone		|$1d-1 fcos zero
	.long	t_operr		|$1d-2 fcos inf
	.long	src_nan		|$1d-3 fcos nan
	.long	scosd		|$1d-4 fcos denorm
	.long	serror		|$1d-5 fcos ERROR
	.long	serror		|$1d-6 fcos ERROR
	.long	serror		|$1d-7 fcos ERROR

	.long	sgetexp		|$1e-0 fgetexp norm
	.long	szero		|$1e-1 fgetexp zero
	.long	t_operr		|$1e-2 fgetexp inf
	.long	src_nan		|$1e-3 fgetexp nan
	.long	sgetexpd	|$1e-4 fgetexp denorm
	.long	serror		|$1e-5 fgetexp ERROR
	.long	serror		|$1e-6 fgetexp ERROR
	.long	serror		|$1e-7 fgetexp ERROR

	.long	sgetman		|$1f-0 fgetman norm
	.long	szero		|$1f-1 fgetman zero
	.long	t_operr		|$1f-2 fgetman inf
	.long	src_nan		|$1f-3 fgetman nan
	.long	sgetmand	|$1f-4 fgetman denorm
	.long	serror		|$1f-5 fgetman ERROR
	.long	serror		|$1f-6 fgetman ERROR
	.long	serror		|$1f-7 fgetman ERROR

	.long	serror		|$20-0 ERROR - illegal extension
	.long	serror		|$20-1 ERROR - illegal extension
	.long	serror		|$20-2 ERROR - illegal extension
	.long	serror		|$20-3 ERROR - illegal extension
	.long	serror		|$20-4 ERROR - illegal extension
	.long	serror		|$20-5 ERROR - illegal extension
	.long	serror		|$20-6 ERROR - illegal extension
	.long	serror		|$20-7 ERROR - illegal extension

	.long	pmod		|$21-0 fmod all
	.long	pmod		|$21-1 fmod all
	.long	pmod		|$21-2 fmod all
	.long	pmod		|$21-3 fmod all
	.long	pmod		|$21-4 fmod all
	.long	serror		|$21-5 fmod ERROR
	.long	serror		|$21-6 fmod ERROR
	.long	serror		|$21-7 fmod ERROR

	.long	serror		|$22-0 ERROR - illegal extension
	.long	serror		|$22-1 ERROR - illegal extension
	.long	serror		|$22-2 ERROR - illegal extension
	.long	serror		|$22-3 ERROR - illegal extension
	.long	serror		|$22-4 ERROR - illegal extension
	.long	serror		|$22-5 ERROR - illegal extension
	.long	serror		|$22-6 ERROR - illegal extension
	.long	serror		|$22-7 ERROR - illegal extension

	.long	serror		|$23-0 ERROR - illegal extension
	.long	serror		|$23-1 ERROR - illegal extension
	.long	serror		|$23-2 ERROR - illegal extension
	.long	serror		|$23-3 ERROR - illegal extension
	.long	serror		|$23-4 ERROR - illegal extension
	.long	serror		|$23-5 ERROR - illegal extension
	.long	serror		|$23-6 ERROR - illegal extension
	.long	serror		|$23-7 ERROR - illegal extension

	.long	serror		|$24-0 ERROR - illegal extension
	.long	serror		|$24-1 ERROR - illegal extension
	.long	serror		|$24-2 ERROR - illegal extension
	.long	serror		|$24-3 ERROR - illegal extension
	.long	serror		|$24-4 ERROR - illegal extension
	.long	serror		|$24-5 ERROR - illegal extension
	.long	serror		|$24-6 ERROR - illegal extension
	.long	serror		|$24-7 ERROR - illegal extension

	.long	prem		|$25-0 frem all
	.long	prem		|$25-1 frem all
	.long	prem		|$25-2 frem all
	.long	prem		|$25-3 frem all
	.long	prem		|$25-4 frem all
	.long	serror		|$25-5 frem ERROR
	.long	serror		|$25-6 frem ERROR
	.long	serror		|$25-7 frem ERROR

	.long	pscale		|$26-0 fscale all
	.long	pscale		|$26-1 fscale all
	.long	pscale		|$26-2 fscale all
	.long	pscale		|$26-3 fscale all
	.long	pscale		|$26-4 fscale all
	.long	serror		|$26-5 fscale ERROR
	.long	serror		|$26-6 fscale ERROR
	.long	serror		|$26-7 fscale ERROR

	.long	serror		|$27-0 ERROR - illegal extension
	.long	serror		|$27-1 ERROR - illegal extension
	.long	serror		|$27-2 ERROR - illegal extension
	.long	serror		|$27-3 ERROR - illegal extens<style>.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
.highlight .na { color: #336699 } /* Name.Attribute */
.highlight .nb { color: #003388 } /* Name.Builtin */
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555555 } /* Name.Decorator */
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */</style><div class="highlight"><pre><span></span><span class="ch">#!/usr/bin/env python</span>
<span class="c1">##############################################################################</span>
<span class="c1"># Copyright (c) 2016 Huawei Technologies Co.,Ltd and others.</span>
<span class="c1">#</span>
<span class="c1"># All rights reserved. This program and the accompanying materials</span>
<span class="c1"># are made available under the terms of the Apache License, Version 2.0</span>
<span class="c1"># which accompanies this distribution, and is available at</span>
<span class="c1"># http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="c1">##############################################################################</span>

<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">impo